Prepare AFM tip solvation

This notebook demonstrates deposition of an SDS adsorption layer on a non-spherical AFM tip model.

Initialization

IPython magic

In [ ]:
%load_ext autoreload
%autoreload 3

Imports

In [ ]:
import ase.io # here used for reading pdb files
from ase.visualize import view
from ase.visualize.plot import plot_atoms # has nasty offset issues
from cycler import cycler # here used for cycling through colors in plots
import datetime
import fabric # for pythonic ssh connections
from fireworks import LaunchPad, Firework, Tracker, Workflow 
from fireworks import FileTransferTask, PyTask, ScriptTask

# FireWorks functionality 
from fireworks import Firework, LaunchPad, ScriptTask, Workflow
from fireworks.user_objects.firetasks.templatewriter_task import TemplateWriterTask
from fireworks.user_objects.firetasks.filepad_tasks import AddFilesTask, GetFilesTask, GetFilesByQueryTask
from jlhfw.fireworks.user_objects.firetasks.cmd_tasks import CmdTask
from fireworks.utilities.filepad import FilePad # direct FilePad access, similar to the familiar LaunchPad

import glob
import gc # manually clean up memory with gc.collect()
import gromacs # GromacsWrapper, here used for evoking gmc commands, reading and writing .ndx files
# from io import StringIO, TextIOWrapper
import io
import itertools # for products of iterables
import json # generic serialization of lists and dicts
import jinja2 # here used for filling packmol input script template
import jinja2.meta # for gathering variables in a jinja2 template
from jlhfw.fireworks.user_objects.firetasks.cmd_tasks import CmdTask # custom Fireworks additions
import logging 
import matplotlib.pyplot as plt
import MDAnalysis as mda # here used for reading and analyzing gromacs trajectories
import MDAnalysis.analysis.rdf as mda_rdf
import MDAnalysis.analysis.rms as mda_rms
from mpl_toolkits.mplot3d import Axes3D # here used for 3d point cloud scatter plot
import miniball # finds minimum bounding sphere of a point set
import nglview
import numpy as np
import os, os.path
import pandas as pd
import panedr # reads GROMACS edr into pandas df, requires pandas and pbr
import parmed as pmd # has quite a few advantages over ASE when it comes to parsing pdb
from pprint import pprint
import pymongo # for sorting in queries
import scipy.constants as sc
import subprocess # used for evoking external packmol
import sys
import tempfile
import yaml

GromacsWrapper might need a file ~/.gromacswrapper.cfg with content

[Gromacs]
tools = gmx gmx_d 
# gmx_mpi_d gmx_mpi_d

# name of the logfile that is written to the current directory
logfilename = gromacs.log

# loglevels (see Python's logging module for details)
#   ERROR   only fatal errors
#   WARN    only warnings
#   INFO    interesting messages
#   DEBUG   everything

# console messages written to screen
loglevel_console = INFO

# file messages written to logfilename
loglevel_file = DEBUG

in order to know the GROMACS executables it is allowed to use. Otherwise, calls to gmx_mpi or gmx_mpi_d without MPI wrapper might lead to MPI warnings in output that cause GromacsWrapper to fail.

Logging

In [ ]:
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger()
logger.setLevel(logging.INFO)

ParmEd needs to know the GROMACS topology folder, usually get this from envionment variable GMXLIB:

Function decfinitions

In [ ]:
def find_undeclared_variables(infile):
    """identify all variables evaluated in a jinja 2 template file"""
    env = jinja2.Environment()
    with open(infile) as template_file:
        parsed = env.parse(template_file.read())

    undefined = jinja2.meta.find_undeclared_variables(parsed)
    return undefined
In [ ]:
def plot_side_views_with_spheres(atoms, cc, R, figsize=(12,4), fig=None, ax=None):
    """
    Plots xy, yz and zx projections of atoms and sphere(s) 
    
    Parameters
    ----------
    atoms: ase.atoms
        
    cc: (N,3) ndarray
        centers of spheres
    R:  (N,) ndarray
        radii of spheres
    figsize: 2-tuple, default (12,4)
    fig: matplotlib.figure, default None
    ax:  list of three matploblib.axes objects
    """
    
    logger = logging.getLogger(__name__)
    
    atom_radii = 0.5
    
    cc = np.array(cc,ndmin=2)
    logger.info("C({}) = {}".format(cc.shape,cc))
    R = np.array(R,ndmin=1)
    logger.info("R({}) = {}".format(R.shape,R))
    xmin = atoms.get_positions().min(axis=0)
    xmax = atoms.get_positions().max(axis=0)
    logger.info("xmin({}) = {}".format(xmin.shape,xmin))
    logger.info("xmax({}) = {}".format(xmax.shape,xmax))
    
    ### necessary due to ASE-internal atom position computations
    # see https://gitlab.com/ase/ase/blob/master/ase/io/utils.py#L69-82
    X1 = xmin - atom_radii
    X2 = xmax + atom_radii

    M = (X1 + X2) / 2
    S = 1.05 * (X2 - X1)

    scale = 1
    internal_offset = [ np.array(
        [scale * np.roll(M,i)[0] - scale * np.roll(S,i)[0] / 2, 
         scale * np.roll(M,i)[1] - scale * np.roll(S,i)[1] / 2]) for i in range(3) ]

    ### 
    atom_permut = [ atoms.copy() for i in range(3) ]

    for i, a in enumerate(atom_permut):
        a.set_positions( np.roll(a.get_positions(),i,axis=1) )

    rot      = ['0x,0y,0z']*3#,('90z,90x'),('90x,90y,0z')]
    label    = [ np.roll(np.array(['x','y','z'],dtype=str),i)[0:2] for i in range(3) ]
    
    # dim: sphere, view, coord
    center   = np.array([ 
        [ np.roll(C,i)[0:2] - internal_offset[i] for i in range(3) ] for C in cc ])

    logger.info("projected cc({}) = {}".format(center.shape,center))
    
    color_cycle = cycler(color=[
        'tab:blue', 'tab:orange', 'tab:green', 'tab:red', 'tab:purple'])
    circle   = [ [ plt.Circle( c , r, fill=False, **col) for c in C ] for C,r,col in zip(center,R,color_cycle) ]
    margin   = 1.1
    
    # dim: view, coord, minmax (i.e., 3,2,2)
    plot_bb = np.rollaxis( np.array(
        [ np.min(center - margin*(np.ones(center.T.shape)*R).T,axis=0),
          np.max(center + margin*(np.ones(center.T.shape)*R).T,axis=0) ] ).T, 1, 0)
    
    #plot_bb  = np.array( [ [
    #    [ [np.min(c[0]-margin*R[0]), np.max(c[0]+margin*R[0])], 
    #      [np.min(c[1]-margin*R[0]), np.max(c[1]+margin*R[0])] ] ) for c in C ] for C,r in zip(center,R) ] )
    logger.info("projected bb({}) = {}".format(plot_bb.shape,plot_bb))
    
    if ax is None:
        fig, ax = plt.subplots(1,3,figsize=figsize)
            
    (ax_xy, ax_xz, ax_yz)  = ax[:]
    logger.info("iterators len(atom_permut={}, len(ax)={}, len(rot)={}, len(circle)={}".format(
            len(atom_permut),len(ax),len(rot),len(circle)))
    
    #logger.info("len(circle)={}".format(len(circle))

    #for aa, a, r, C in zip(atom_permut,ax,rot,circle):
    for i, a in enumerate(ax):
        # rotation strings see https://gitlab.com/ase/ase/blob/master/ase/utils/__init__.py#L235-261
        plot_atoms(atom_permut[i],a,rotation=rot[i],radii=0.5,show_unit_cell=0,offset=(0,0))
        for j, c in enumerate(circle):
            logger.info("len(circle[{}])={}".format(j,len(c)))
            a.add_patch(c[i])

    for a,l,bb in zip(ax,label,plot_bb): 
        a.set_xlabel(l[0])
        a.set_ylabel(l[1])
        a.set_xlim(*bb[0,:])
        a.set_ylim(*bb[1,:])

    return fig, ax
In [ ]:
def pack_sphere(C,
    R_inner_constraint, # shell inner radius
    R_outer_constraint, # shell outer radius
    sfN, # number  of surfactant molecules
    inner_atom_number, # inner atom
    outer_atom_number, # outer atom
    surfactant = 'SDS',
    counterion = 'NA',
    tolerance = 2):
    """Creates context for filling Jinja2 PACKMOL input template in order to
    generate preassembled surfactant spheres with couinterions at polar heads"""

    logger = logging.getLogger(__name__)
    logger.info(
        "sphere with {:d} surfactant molecules in total.".format(sfN ) )

    # sbX, sbY, sbZ = sb_measures

    # spheres parallelt to x-axis
    sphere = {}
    ionsphere = {}

    # surfactant spheres
    #   inner constraint radius: R + 1*tolerance
    #   outer constraint radius: R + 1*tolerance + l_surfactant
    # ions between cylindric planes at
    #   inner radius:            R + 1*tolerance + l_surfactant
    #   outer radius:            R + 2*tolerance + l_surfactant
    sphere["surfactant"] = surfactant

    
    sphere["inner_atom_number"] = inner_atom_number
    sphere["outer_atom_number"] = outer_atom_number

    sphere["N"] = sfN
        
    sphere["c"] = C

    sphere["r_inner"] = R_inner
    sphere["r_inner_constraint"] = R_inner_constraint
    sphere["r_outer_constraint"] = R_outer_constraint
    sphere["r_outer"] = R_outer
    
    logging.info(
        "sphere with {:d} molecules at {}, radius {}".format(
        sphere["N"], sphere["c"], sphere["r_outer"]))

    # ions at outer surface
    ionsphere["ion"] = counterion

    
    ionsphere["N"] = sphere["N"]
    ionsphere["c"] = sphere["c"]
    ionsphere["r_inner"] = sphere["r_outer"]
    ionsphere["r_outer"] = sphere["r_outer"] + tolerance


    # experience shows: movebadrandom advantegous for (hemi-) spheres
    context = {
        'spheres':     [sphere],
        'ionspheres':  [ionsphere],
        'movebadrandom': True,
    }
    return context
In [ ]:
def memuse():
    """Quick overview on memory usage of objects in Jupyter notebook"""
    # https://stackoverflow.com/questions/40993626/list-memory-usage-in-ipython-and-jupyter
    # These are the usual ipython objects, including this one you are creating
    ipython_vars = ['In', 'Out', 'exit', 'quit', 'get_ipython', 'ipython_vars']

    # Get a sorted list of the objects and their sizes
    return sorted([(x, sys.getsizeof(globals().get(x))) for x in dir(sys.modules['__main__']) if not x.startswith('_') and x not in sys.modules and x not in ipython_vars], key=lambda x: x[1], reverse=True)

Global settings

In [ ]:
os.environ['GMXLIB']
In [ ]:
pmd.gromacs.GROMACS_TOPDIR = os.environ['GMXLIB']
In [ ]:
prefix = '/mnt/dat/work/testuser/indenter/sandbox/20191110_packmol'
In [ ]:
os.chdir(prefix)
In [ ]:
hpc_max_specs = {
    'forhlr2': {
        'fw_queue_category':   'forhlr2_queue',
        'fw_noqueue_category': 'forhlr2_noqueue',
        'queue':'develop',
        'physical_cores_per_node': 20,
        'logical_cores_per_node':  40,
        'nodes': 4,
        'walltime':  '00:60:00'
    },
    'juwels_devel': {
        'fw_queue_category':   'juwels_queue',
        'fw_noqueue_category': 'juwels_noqueue',
        'queue':'devel',
        'physical_cores_per_node': 48,
        'logical_cores_per_node':  96,
        'nodes': 8,
        'walltime':  '00:30:00'   
    },
    'juwels': {
        'fw_queue_category':   'juwels_queue',
        'fw_noqueue_category': 'juwels_noqueue',
        'queue':'batch',
        'physical_cores_per_node': 48,
        'logical_cores_per_node':  96,
        'nodes': 1024,
        'walltime':  '00:30:00'   
    }
}
In [ ]:
std_exports = {
    'forhlr2': {
        'OMP_NUM_THREADS': 1,
        'KMP_AFFINITY':    "'verbose,compact,1,0'",
        'I_MPI_PIN_DOMAIN':'core'
    },
    'juwels': {
        'OMP_NUM_THREADS': 1,
        'KMP_AFFINITY':    "'verbose,compact,1,0'",
        'I_MPI_PIN_DOMAIN':'core'
    }
}

FireWorks LaunchPad and FilePad

In [ ]:
# the FireWorks LaunchPad
lp = LaunchPad.auto_load() #Define the server and database
In [ ]:
# FilePad behaves analogous to LaunchPad
fp = FilePad.auto_load()

Conversion from LAMMPS data format to PDB

The vollowing bash / tcl snippet converts a LAMMPS data file to PDB, assigning the desired names as mapped in a yaml file

#!/bin/bash
# echo "package require jlhvmd; jlh lmp2pdb indenter.lammps indenter.pdb" | vmd -eofexit
vmd -eofexit << 'EOF'
package require jlhvmd
topo readlammpsdata indenter.lammps
jlh type2name SDS_type2name.yaml
jlh name2res  SDS_name2res.yaml
set sel [atomselect top all]
$sel writepdb indenter.pdb
EOF

pdb_chain.py indenter.pdb > indenter_wo_chainid.pdb
pdb_reres_by_atom_9999.py indenter_wo_chainid.pdb > indenter_reres.pdb

Requires

Inspect AFM tip model

Read pdb

In [35]:
infile = os.path.join(prefix,'indenter_reres.pdb')
In [36]:
atoms = ase.io.read(infile,format='proteindatabank')
In [37]:
atoms
Out[37]:
Atoms(symbols='Au3873', pbc=True, cell=[47.832, 49.629, 47.369], atomtypes=..., bfactor=..., occupancy=..., residuenames=..., residuenumbers=...)

Display with ASE view

In [19]:
v = view(atoms,viewer='ngl')
v.view._remote_call("setSize", target="Widget", args=["400px", "400px"])
v.view.center()
v.view.background='#ffc'
v

Get the bounding sphere around point set

In [38]:
S = atoms.get_positions()
In [39]:
C, R_sq = miniball.get_bounding_ball(S)
In [40]:
C # sphere center
Out[40]:
array([-0.02151743, -0.17756268,  0.46946046])
In [41]:
R = np.sqrt(R_sq)
In [42]:
R # sphere radius
Out[42]:
26.390609083217864
In [43]:
xmin = atoms.get_positions().min(axis=0)
xmax = atoms.get_positions().max(axis=0)
In [44]:
xmin
Out[44]:
array([-24.053, -26.065, -22.045])
In [45]:
del S

Plot 2d projections of point set and bounding sphere

In [46]:
# plot side views with sphere projections
plot_side_views_with_spheres(atoms,C,R)
INFO:__main__:C((1, 3)) = [[-0.02151743 -0.17756268  0.46946046]]
INFO:__main__:R((1,)) = [26.39060908]
INFO:__main__:xmin((3,)) = [-24.053 -26.065 -22.045]
INFO:__main__:xmax((3,)) = [24.555 25.426 21.998]
INFO:__main__:projected cc((1, 3, 2)) = [[[25.77168257 27.69971232]
  [24.14053546 25.77168257]
  [27.69971232 24.14053546]]]
INFO:__main__:projected bb((3, 2, 2)) = [[[-3.25798742 54.80135256]
  [-1.32995767 56.72938231]]

 [[-4.88913453 53.17020545]
  [-3.25798742 54.80135256]]

 [[-1.32995767 56.72938231]
  [-4.88913453 53.17020545]]]
INFO:__main__:iterators len(atom_permut=3, len(ax)=3, len(rot)=3, len(circle)=1
INFO:__main__:len(circle[0])=3
INFO:__main__:len(circle[0])=3
INFO:__main__:len(circle[0])=3
Out[46]:
(<Figure size 864x288 with 3 Axes>,
 array([<matplotlib.axes._subplots.AxesSubplot object at 0x7fdb9f38f400>,
        <matplotlib.axes._subplots.AxesSubplot object at 0x7fdb9f346a58>,
        <matplotlib.axes._subplots.AxesSubplot object at 0x7fdb9f3d5a90>],
       dtype=object))

Plot 3d point set and bounding sphere

In [39]:
# bounding sphere surface
u = np.linspace(0, 2 * np.pi, 100)
v = np.linspace(0, np.pi, 100)
us = np.array([
    np.outer(np.cos(u), np.sin(v)),
    np.outer(np.sin(u), np.sin(v)), 
    np.outer(np.ones(np.size(u)), np.cos(v))])
bs = C + R*us.T
In [40]:
fig = plt.figure(figsize=(10,10))
ax = fig.add_subplot(111, projection='3d')
x = atoms.get_positions()
ax.scatter(x[:,0], x[:,1],x[:,2], c='y', marker='o')
ax.plot_surface(*bs.T, color='b',alpha=0.1) # bounding sphere
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
plt.show()

Measure surfactant molecule

In [41]:
tol = 2 # Ang

Read single surfactant molecule PDB with ParmEd

Utilize parmed to read pbd files ASE has difficulties to decipher.

In [42]:
infile = os.path.join(prefix,'1_SDS.pdb')
In [43]:
surfactant_pmd = pmd.load_file(infile)
In [44]:
surfactant_pmd.atoms[-1].atomic_number
Out[44]:
0

Convert ParmEd structure to ASE atoms

In [45]:
surfactant_ase = ase.Atoms(
    numbers=[1 if a.atomic_number == 0 else a.atomic_number for a in surfactant_pmd.atoms],
    positions=surfactant_pmd.get_coordinates(0))

Get bounding sphere of single surfactant molecule

In [46]:
C_surfactant, R_sq_surfactant = miniball.get_bounding_ball(surfactant_ase.get_positions())
In [47]:
C_surfactant
Out[47]:
array([ 1.885,  0.545, 15.47 ])
In [48]:
R_surfactant = np.sqrt(R_sq_surfactant)
In [49]:
R_surfactant
Out[49]:
7.758430898061799
In [50]:
C_surfactant
Out[50]:
array([ 1.885,  0.545, 15.47 ])
In [51]:
surfactant_ase[:5][1]
Out[51]:
Atom('O', [3.47, 0.7, 20.88], index=1)

Estimate constraint sphere radii

In [52]:
R_OSL = np.linalg.norm(C_surfactant - surfactant_ase[1].position)
In [53]:
R_OSL
Out[53]:
5.639534555262515
In [54]:
d_head = R_surfactant - R_OSL # roughly: diameter of head group
In [55]:
R_inner = R + tol # place surfactant molecules outside of this sphere
In [56]:
R_inner_constraint = R + tol + d_head # place surfactant tail hydrocarbon within this sphere
In [57]:
R_outer_constraint = R + 2*R_surfactant + tol # place head group sulfur outside this sphere
In [58]:
R_outer = R + 2*R_surfactant + 2*tol # place suractant molecules within this sphere
In [59]:
rr = [R,R_inner,R_inner_constraint,R_outer_constraint,R_outer]
In [60]:
cc = [C]*5

Show 2d projections of geometrical constraints around AFM tip model

In [61]:
plot_side_views_with_spheres(atoms,cc,rr,figsize=(20,8))
plt.show()
INFO:__main__:C((5, 3)) = [[-0.02151743 -0.17756268  0.46946046]
 [-0.02151743 -0.17756268  0.46946046]
 [-0.02151743 -0.17756268  0.46946046]
 [-0.02151743 -0.17756268  0.46946046]
 [-0.02151743 -0.17756268  0.46946046]]
INFO:__main__:R((5,)) = [26.39060908 28.39060908 30.50950543 43.90747088 45.90747088]
INFO:__main__:xmin((3,)) = [-24.053 -26.065 -22.045]
INFO:__main__:xmax((3,)) = [24.555 25.426 21.998]
INFO:__main__:projected cc((5, 3, 2)) = [[[25.77168257 27.69971232]
  [24.14053546 25.77168257]
  [27.69971232 24.14053546]]

 [[25.77168257 27.69971232]
  [24.14053546 25.77168257]
  [27.69971232 24.14053546]]

 [[25.77168257 27.69971232]
  [24.14053546 25.77168257]
  [27.69971232 24.14053546]]

 [[25.77168257 27.69971232]
  [24.14053546 25.77168257]
  [27.69971232 24.14053546]]

 [[25.77168257 27.69971232]
  [24.14053546 25.77168257]
  [27.69971232 24.14053546]]]
INFO:__main__:projected bb((3, 2, 2)) = [[[-24.7265354   76.26990054]
  [-22.79850565  78.19793029]]

 [[-26.35768251  74.63875343]
  [-24.7265354   76.26990054]]

 [[-22.79850565  78.19793029]
  [-26.35768251  74.63875343]]]
INFO:__main__:iterators len(atom_permut=3, len(ax)=3, len(rot)=3, len(circle)=5
INFO:__main__:len(circle[0])=3
INFO:__main__:len(circle[1])=3
INFO:__main__:len(circle[2])=3
INFO:__main__:len(circle[3])=3
INFO:__main__:len(circle[4])=3
INFO:__main__:len(circle[0])=3
INFO:__main__:len(circle[1])=3
INFO:__main__:len(circle[2])=3
INFO:__main__:len(circle[3])=3
INFO:__main__:len(circle[4])=3
INFO:__main__:len(circle[0])=3
INFO:__main__:len(circle[1])=3
INFO:__main__:len(circle[2])=3
INFO:__main__:len(circle[3])=3
INFO:__main__:len(circle[4])=3

Packing the surfactant film

Identify placeholders in jinja2 template

The template looks like this:

In [424]:
with open(os.path.join(infile_prefix,'surfactants_on_sphere.inp'),'r') as f:
    print(f.read())
# {{ system_name }}
# {{ header }}

# Change the maximum number of optimization loops, default 20
nloop {{ nloop|default(20,true)|int }}
# Change the maximum number of Gencan iterations per loop. default 50
maxit {{ maxit|default(50,true)|int }}

tolerance {{ "%.3f"|format(tolerance) }}

{% if movebadrandom %}
# One of the convergence heuristics of Packmol consists in moving molecules
# that are badly placed. If this option is set, the molecules will be placed
# in new random position in the box. If not (default), the molecules are
# moved to positions nearby molecules that are well packed. Using this
# option can help when the restraints are complex, but will probably be bad
# if there are large structures, because the new random position might overlap
# with those.
movebadrandom
{% endif %}

# Coordinate file types will be in pdb format (keyword not required for
# pdb file format, but required for tinker, xyz or moldy).

filetype pdb

output {{ system_name }}_packmol.pdb

{% if write_restart %}
restart_to {{ system_name }}_restart.pack
{% endif %}


{% if static_components %}
{% for static_component in static_components %} 
structure {{ static_component.name }}.pdb
  number 1
  resnumbers 2
  fixed {{ "%.3f"|format(static_component.offset|default([0, 0, 0])|first) }} {{ "%.3f"|format((static_component.offset|default([0, 0, 0]))[1]) }} {{ "%.3f"|format(static_component.offset|default([0 ,0, 0])|last) }} 0. 0. 0. 
end structure 
{% endfor %} 
{% endif %}

{% for sphere in spheres %} 
structure 1_{{ sphere.surfactant }}.pdb 
  resnumbers 2
  number {{ sphere.N|int }}
  inside sphere {{ "%.3f"|format(sphere.c[0]) }} {{ "%.3f"|format(sphere.c[1]) }} {{ "%.3f"|format(sphere.c[2]) }}  {{ "%.3f"|format(sphere.r_outer) }}
  outside sphere {{ "%.3f"|format(sphere.c[0]) }} {{ "%.3f"|format(sphere.c[1]) }} {{ "%.3f"|format(sphere.c[2]) }}  {{ "%.3f"|format(sphere.r_inner) }}
  atoms {{ sphere.inner_atom_number|int }}
    inside sphere {{ "%.3f"|format(sphere.c[0]) }} {{ "%.3f"|format(sphere.c[1]) }} {{ "%.3f"|format(sphere.c[2]) }}  {{ "%.3f"|format(sphere.r_inner_constraint) }}
  end atoms
  atoms {{ sphere.outer_atom_number|int }}
    outside sphere {{ "%.3f"|format(sphere.c[0]) }} {{ "%.3f"|format(sphere.c[1]) }} {{ "%.3f"|format(sphere.c[2]) }}  {{ "%.3f"|format(sphere.r_outer_constraint) }}
  end atoms
  {% if write_restart %}
    restart_to {{ system_name }}_sphere_{{ "%03d"|format(loop.index0) }}_restart.pack
  {% endif %}
end structure
{% endfor %}

# ions outside sphere
{% for sphere in ionspheres %}
structure 1_{{ sphere.ion }}.pdb
  resnumbers 2
  number {{ sphere.N|int }}
  # along x axis
  inside sphere {{ "%.3f"|format(sphere.c[0]) }} {{ "%.3f"|format(sphere.c[1]) }} {{ "%.3f"|format(sphere.c[2]) }}  {{ "%.3f"|format(sphere.r_outer) }}
  outside sphere {{ "%.3f"|format(sphere.c[0]) }} {{ "%.3f"|format(sphere.c[1]) }} {{ "%.3f"|format(sphere.c[2]) }}  {{ "%.3f"|format(sphere.r_inner) }}
  {% if write_restart %}
    restart_to {{ system_name }}_sphere_{{ "%03d"|format(loop.index0) }}_restart.pack
  {% endif %}
end structure
{% endfor %}

In [425]:
# get all placholders in template
template_file = os.path.join(infile_prefix,'surfactants_on_sphere.inp')
In [426]:
v = find_undeclared_variables(template_file)
In [427]:
v # we want to fill in these placeholder variables
Out[427]:
{'header',
 'ionspheres',
 'maxit',
 'movebadrandom',
 'nloop',
 'spheres',
 'static_components',
 'system_name',
 'tolerance',
 'write_restart'}

System and constraint parameters

In [428]:
surfactant = 'SDS'
counterion = 'NA'
tolerance = 2 # Ang
sfN = 200
In [429]:
l_surfactant = 2*R_surfactant
In [430]:
# head atom to be geometrically constrained
surfactant_head_bool_ndx = np.array([ a.name == 'S' for a in surfactant_pmd.atoms ],dtype=bool)
In [431]:
# tail atom to be geometrically constrained
surfactant_tail_bool_ndx = np.array([ a.name == 'C12' for a in surfactant_pmd.atoms ],dtype=bool)
In [432]:
head_atom_number = surfactant_head_ndx = np.argwhere(surfactant_head_bool_ndx)[0,0]
In [433]:
tail_atom_number = surfactant_tail_ndx = np.argwhere(surfactant_tail_bool_ndx)[0,0]
In [434]:
# settings can be overridden
packmol_script_context = {
    'header':        '20191113 TEST PACKING',
    'system_name':   '200_SDS_on_50_Ang_AFM_tip_model',
    'tolerance':     tolerance,
    'write_restart': True,
    
    'static_components': [
        {
            'name': 'indenter_reres'
        }
    ]
}

# use pack_sphere function at the notebook's head to generate template context
packmol_script_context.update(
    pack_sphere(
        C,R_inner_constraint,R_outer_constraint, sfN, 
        tail_atom_number+1, head_atom_number+1, surfactant, counterion, tolerance))
INFO:__main__:sphere with 200 surfactant molecules in total.
INFO:root:sphere with 200 molecules at [-0.02151743 -0.17756268  0.46946046], radius 45.90747087934147
In [435]:
packmol_script_context # context generated from system and constraint settings
Out[435]:
{'header': '20191113 TEST PACKING',
 'system_name': '200_SDS_on_50_Ang_AFM_tip_model',
 'tolerance': 2,
 'write_restart': True,
 'static_components': [{'name': 'indenter_reres'}],
 'spheres': [{'surfactant': 'SDS',
   'inner_atom_number': 39,
   'outer_atom_number': 1,
   'N': 200,
   'c': array([-0.02151743, -0.17756268,  0.46946046]),
   'r_inner': 28.390609083217868,
   'r_inner_constraint': 30.50950542601715,
   'r_outer_constraint': 43.90747087934147,
   'r_outer': 45.90747087934147}],
 'ionspheres': [{'ion': 'NA',
   'N': 200,
   'c': array([-0.02151743, -0.17756268,  0.46946046]),
   'r_inner': 45.90747087934147,
   'r_outer': 47.90747087934147}],
 'movebadrandom': True}

Fill a packmol input script template with jinja2

In [436]:
env = jinja2.Environment()
In [437]:
template = jinja2.Template(open(template_file).read())
In [438]:
rendered = template.render(**packmol_script_context)
In [439]:
rendered_file = os.path.join(prefix,'rendered.inp')
In [440]:
with open(rendered_file,'w') as f:
    f.write(rendered)

That's the rendered packmol input file:

In [441]:
print(rendered)
# 200_SDS_on_50_Ang_AFM_tip_model
# 20191113 TEST PACKING

# Change the maximum number of optimization loops, default 20
nloop 20
# Change the maximum number of Gencan iterations per loop. default 50
maxit 50

tolerance 2.000


# One of the convergence heuristics of Packmol consists in moving molecules
# that are badly placed. If this option is set, the molecules will be placed
# in new random position in the box. If not (default), the molecules are
# moved to positions nearby molecules that are well packed. Using this
# option can help when the restraints are complex, but will probably be bad
# if there are large structures, because the new random position might overlap
# with those.
movebadrandom


# Coordinate file types will be in pdb format (keyword not required for
# pdb file format, but required for tinker, xyz or moldy).

filetype pdb

output 200_SDS_on_50_Ang_AFM_tip_model_packmol.pdb


restart_to 200_SDS_on_50_Ang_AFM_tip_model_restart.pack




 
structure indenter_reres.pdb
  number 1
  resnumbers 2
  fixed 0.000 0.000 0.000 0. 0. 0. 
end structure 
 


 
structure 1_SDS.pdb 
  resnumbers 2
  number 200
  inside sphere -0.022 -0.178 0.469  45.907
  outside sphere -0.022 -0.178 0.469  28.391
  atoms 39
    inside sphere -0.022 -0.178 0.469  30.510
  end atoms
  atoms 1
    outside sphere -0.022 -0.178 0.469  43.907
  end atoms
  
    restart_to 200_SDS_on_50_Ang_AFM_tip_model_sphere_000_restart.pack
  
end structure


# ions outside sphere

structure 1_NA.pdb
  resnumbers 2
  number 200
  # along x axis
  inside sphere -0.022 -0.178 0.469  47.907
  outside sphere -0.022 -0.178 0.469  45.907
  
    restart_to 200_SDS_on_50_Ang_AFM_tip_model_sphere_000_restart.pack
  
end structure

Fail running packmol once

In [67]:
packmol = subprocess.Popen(['packmol'],
        stdin=subprocess.PIPE,stdout=subprocess.PIPE, stderr=subprocess.PIPE,
        cwd=prefix, encoding='utf-8')
In [68]:
outs, errs = packmol.communicate(input=rendered)
In [69]:
print(errs) # error with input from PIPE
At line 85 of file setsizes.f90 (unit = 5, file = 'stdin')
Fortran runtime error: Illegal seek

Error termination. Backtrace:
#0  0x7f809e84f2da in ???
#1  0x7f809e84fec5 in ???
#2  0x7f809e85068d in ???
#3  0x561473f0ab78 in ???
#4  0x561473f24797 in ???
#5  0x561473ef429e in ???
#6  0x7f809e0c6b96 in ???
#7  0x561473ef42f9 in ???
#8  0xffffffffffffffff in ???

Read packmol input from file to avoid obscure Fortran error

In [445]:
packmol = subprocess.Popen(['packmol'],
        stdin=open(rendered_file,'r'),stdout=subprocess.PIPE, stderr=subprocess.PIPE,
        cwd=prefix, encoding='utf-8')
In [446]:
outs, errs = packmol.communicate(input=rendered)
In [447]:
print(outs)
################################################################################

 PACKMOL - Packing optimization for the automated generation of
 starting configurations for molecular dynamics simulations.
 
                                                              Version 18.169 

################################################################################

  Packmol must be run with: packmol < inputfile.inp 

  Userguide at: www.ime.unicamp.br/~martinez/packmol 

  Reading input file... (Control-C aborts)
  User defined GENCAN number of iterations:           50
  Will move randomly bad molecues (movebadrandom) 
  Seed for random number generator:      1234567
  Output file: 200_SDS_on_50_Ang_AFM_tip_model_packmol.pdb
  Reading coordinate file: indenter_reres.pdb
  Reading coordinate file: 1_SDS.pdb
  Reading coordinate file: 1_NA.pdb
  Number of independent structures:            3
  The structures are: 
  Structure            1 :indenter_reres.pdb(        3873  atoms)
  Structure            2 :1_SDS.pdb(          42  atoms)
  Structure            3 :1_NA.pdb(           1  atoms)
  Maximum number of GENCAN loops for all molecule packing:           20
  Total number of restrictions:            7
  Distance tolerance:    2.0000000000000000     
  Residue numbering set for structure            1 :           2
  Swap chains of molecules of structure            1 : F
  Residue numbering set for structure            2 :           2
  Swap chains of molecules of structure            2 : F
  Residue numbering set for structure            3 :           2
  Swap chains of molecules of structure            3 : F
  Number of molecules of type            1 :            1
  Number of molecules of type            2 :          200
  Number of molecules of type            3 :          200
  Total number of atoms:        12473
  Molecule indenter_reres.pdb(           1 ) will be fixed.
  Total number of molecules:          401
  Number of fixed molecules:            1
  Number of free molecules:          400
  Number of variables:         2400
  Total number of fixed atoms:         3873
  Maximum internal distance of type            1 :    15.516861796123598     
  Maximum internal distance of type            2 :    0.0000000000000000     
  All atoms must be within these coordinates: 
   x: [   -983.83828264928729      ,    1016.1617173507127       ] 
   y: [   -968.26593579265398      ,    1031.7340642073459       ] 
   z: [   -1008.2634376749747      ,    991.73656232502526       ] 
  If the system is larger than this, increase the sidemax parameter. 

################################################################################

  Building initial approximation ... 

################################################################################

  Adjusting initial point to fit the constraints 

--------------------------------------------------------------------------------

--------------------------------------------------------------------------------

  Molecules of type:            2

  Packing:|0                                                             100%|
          |******************************************************************|
          |******************************************************************|
          |******************************************************************|
          |******************************************************************|
          |

  Restraint-only function value:    3.3849681977768430E-004
  Maximum violation of the restraints:    1.5274183468691311E-004

--------------------------------------------------------------------------------

  Molecules of type:            3

  Packing:|0                                                             100%|
          |******************************************************************|
          |*******

  Restraint-only function value:    3.0675404817696413E-006
  Maximum violation of the restraints:    3.0568646026564722E-006

--------------------------------------------------------------------------------

  Rescaling maximum and minimum coordinates... 
  Computing size of patches... 
  Add fixed molecules to permanent arrays... 
  Reseting center of mass... 

--------------------------------------------------------------------------------

  Setting initial trial coordinates ... 

--------------------------------------------------------------------------------

--------------------------------------------------------------------------------

  Molecules of type:            2
  Adjusting random positions to fit the constraints. 
  Packing:|0                                                             100%|
          |******************************************************************|
          |******************************************************************|
          |******************************************************************|
          |
  Restraint-only function value:    4.0647927352552163E-005
  Maximum violation of the restraints:    2.5059054446262977E-005

--------------------------------------------------------------------------------

  Molecules of type:            3
  Adjusting random positions to fit the constraints. 
  Packing:|0                                                             100%|
          |***********************************
  Restraint-only function value:    1.0167420490416640E-005
  Maximum violation of the restraints:    1.0167399339840822E-005

################################################################################

  Objective function at initial point:    14970.016318689450     

################################################################################

  Packing molecules of type:            2

################################################################################


--------------------------------------------------------------------------------

  Starting GENCAN loop:            0
  Scaling radii by:    1.1000000000000001     

  Packing:|0                                                             100%|
          |******************************************************************|
          |******************************************************************|
          |******************************************************************|
          |******************************************************************|
          |******************************************************************|

  Function value from last GENCAN loop: f = .72392E+01
  Best function value before: f = .14965E+05
  Improvement from best function value:    99.95 %
  Improvement from last loop:    99.95 %
  Maximum violation of target distance:     0.103340
  Maximum violation of the constraints: .13097E+01
  All-type function value: .16725E+02

--------------------------------------------------------------------------------


--------------------------------------------------------------------------------

  Starting GENCAN loop:            1
  Scaling radii by:    1.1000000000000001     

  Packing:|0                                                             100%|
          |******************************************************************|
          |******************************************************************|
          |******************************************************************|
          |******************************************************************|
          |******************************************************************|

  Function value from last GENCAN loop: f = .37594E+01
  Best function value before: f = .72392E+01
  Improvement from best function value:    48.07 %
  Improvement from last loop:    48.07 %
  Maximum violation of target distance:     0.114974
  Maximum violation of the constraints: .12552E+01
  All-type function value: .13604E+02

--------------------------------------------------------------------------------


--------------------------------------------------------------------------------

  Starting GENCAN loop:            2
  Scaling radii by:    1.1000000000000001     

  Packing:|0                                                             100%|
          |******************************************************************|
          |******************************************************************|
          |******************************************************************|
          |******************************************************************|
          |******************************************************************|

  Function value from last GENCAN loop: f = .37594E+01
  Best function value before: f = .37594E+01
  Improvement from best function value:    -0.00 %
  Improvement from last loop:    -0.00 %
  Maximum violation of target distance:     0.114970
  Maximum violation of the constraints: .12552E+01
  All-type function value: .13604E+02

--------------------------------------------------------------------------------

  Moving worst molecules ... 
  Function value before moving molecules:   3.7594347414882359     
  Type         1 molecules with non-zero contributions:    1.00%
  Moving         2 molecules of type         1
  New positions will be aleatory (movebadrandom is set) 
   Moving:|0                                                             100%|
          |******************************************************************|
  Function value after moving molecules:   190.95467059589666     

--------------------------------------------------------------------------------

  Starting GENCAN loop:            3
  Scaling radii by:    1.0000000000000000     

  Packing:|0                                                             100%|
          |******************************************************************|
          |

  Function value from last GENCAN loop: f = .12426E-03
  Best function value before: f = .37594E+01
  Improvement from best function value:    99.99 %
  Improvement from last loop:    99.99 %
  Maximum violation of target distance:     0.008609
  Maximum violation of the constraints: .25627E-07
  Wrote restart file for all system: 200_SDS_on_50_Ang_AFM_tip_model_restart.pack
  Wrote restart file: 200_SDS_on_50_Ang_AFM_tip_model_sphere_000_restart.pack
  Wrote restart file: 200_SDS_on_50_Ang_AFM_tip_model_sphere_000_restart.pack
  Current structure written to file: 200_SDS_on_50_Ang_AFM_tip_model_packmol.pdb
--------------------------------------------------------------------------------
  Packing solved for molecules of type           2
  Objective function value:    1.2425565568112952E-004
  Maximum violation of target distance:    8.6094610529170446E-003
  Max. constraint violation:    2.5626585515139629E-008
--------------------------------------------------------------------------------

################################################################################

  Packing molecules of type:            3

################################################################################


--------------------------------------------------------------------------------

  Starting GENCAN loop:            0
  Scaling radii by:    1.1000000000000001     

  Packing:|0                                                             100%|
          |**************

  Function value from last GENCAN loop: f = .91795E-06
  Best function value before: f = .16875E+01
  Improvement from best function value:    99.99 %
  Improvement from last loop:    99.99 %
  Maximum violation of target distance:     0.000000
  Maximum violation of the constraints: .91795E-06
  Wrote restart file for all system: 200_SDS_on_50_Ang_AFM_tip_model_restart.pack
  Wrote restart file: 200_SDS_on_50_Ang_AFM_tip_model_sphere_000_restart.pack
  Wrote restart file: 200_SDS_on_50_Ang_AFM_tip_model_sphere_000_restart.pack
  Current structure written to file: 200_SDS_on_50_Ang_AFM_tip_model_packmol.pdb
--------------------------------------------------------------------------------
  Packing solved for molecules of type           3
  Objective function value:    9.1795454225130970E-007
  Maximum violation of target distance:    0.0000000000000000     
  Max. constraint violation:    9.1795454225130970E-007
--------------------------------------------------------------------------------

################################################################################

  Packing all molecules together 

################################################################################


--------------------------------------------------------------------------------

  Starting GENCAN loop:            0
  Scaling radii by:    1.1000000000000001     

  Packing:|0                                                             100%|
          |******************************************************************|
          |**************

  Function value from last GENCAN loop: f = .23240E-02
  Best function value before: f = .81567E+01
  Improvement from best function value:    99.97 %
  Improvement from last loop:    99.97 %
  Maximum violation of target distance:     0.000000
  Maximum violation of the constraints: .14431E-02
  Wrote restart file for all system: 200_SDS_on_50_Ang_AFM_tip_model_restart.pack
  Wrote restart file: 200_SDS_on_50_Ang_AFM_tip_model_sphere_000_restart.pack
  Wrote restart file: 200_SDS_on_50_Ang_AFM_tip_model_sphere_000_restart.pack

################################################################################

                                 Success! 
              Final objective function value: .23240E-02
              Maximum violation of target distance:   0.000000
              Maximum violation of the constraints: .14431E-02

--------------------------------------------------------------------------------

              Please cite this work if Packmol was useful: 

           L. Martinez, R. Andrade, E. G. Birgin, J. M. Martinez, 
         PACKMOL: A package for building initial configurations for
                   molecular dynamics simulations. 
          Journal of Computational Chemistry, 30:2157-2164,2009.

################################################################################

  Solution written to file: 200_SDS_on_50_Ang_AFM_tip_model_packmol.pdb

--------------------------------------------------------------------------------

   Running time:    16.5154209      seconds. 

--------------------------------------------------------------------------------



In [448]:
with open('packmol.log','w') as f:
    f.write(outs)

Inspect packed systems

In [450]:
packmol_pdb = '200_SDS_on_50_Ang_AFM_tip_model_packmol.pdb'
In [451]:
infile = os.path.join(prefix, packmol_pdb)
In [452]:
surfactant_shell_pmd = pmd.load_file(infile)
In [453]:
# with ParmEd and nglview we get automatic bond guessing
pmd_view = nglview.show_parmed(surfactant_shell_pmd)
pmd_view.clear_representations()
pmd_view.background = 'white'
pmd_view.add_representation('ball+stick')
pmd_view
In [454]:
surfactant_shell_ase = ase.Atoms(
    numbers=[1 if a.atomic_number == 0 else a.atomic_number for a in surfactant_shell_pmd.atoms],
    positions=surfactant_shell_pmd.get_coordinates(0))
In [455]:
# with ASE, we get no bonds at all
ase_view = nglview.show_ase(surfactant_shell_ase)
ase_view.clear_representations()
ase_view.background = 'white'
ase_view.add_representation('ball+stick')
ase_view

Get bounding sphere again and display AFM tip bounding spphere as well as surfactant layer bounding sphere

In [399]:
C_shell, R_sq_shell = miniball.get_bounding_ball(surfactant_shell_ase.get_positions())
In [400]:
C_shell
Out[400]:
array([-0.04885013, -0.16981001,  0.45076107])
In [401]:
R_shell = np.sqrt(R_sq_shell)
In [402]:
R_shell
Out[402]:
47.87750211274763
In [403]:
plot_side_views_with_spheres(surfactant_shell_ase,[C,C_shell],[R,R_shell])
INFO:__main__:C((2, 3)) = [[-0.02151743 -0.17756268  0.46946046]
 [-0.04885013 -0.16981001  0.45076107]]
INFO:__main__:R((2,)) = [26.39060908 47.87750211]
INFO:__main__:xmin((3,)) = [-41.553 -44.408 -45.82 ]
INFO:__main__:xmax((3,)) = [38.14  44.04  44.228]
INFO:__main__:projected cc((2, 3, 2)) = [[[44.04880757 46.96663732]
  [49.06566046 44.04880757]
  [46.96663732 49.06566046]]

 [[44.02147487 46.97438999]
  [49.04696107 44.02147487]
  [46.97438999 49.04696107]]]
INFO:__main__:projected bb((3, 2, 2)) = [[[ -8.64377746  96.68672719]
  [ -5.69086233  99.63964231]]

 [[ -3.61829125 101.71221339]
  [ -8.64377746  96.68672719]]

 [[ -5.69086233  99.63964231]
  [ -3.61829125 101.71221339]]]
INFO:__main__:iterators len(atom_permut=3, len(ax)=3, len(rot)=3, len(circle)=2
INFO:__main__:len(circle[0])=3
INFO:__main__:len(circle[1])=3
INFO:__main__:len(circle[0])=3
INFO:__main__:len(circle[1])=3
INFO:__main__:len(circle[0])=3
INFO:__main__:len(circle[1])=3
Out[403]:
(<Figure size 864x288 with 3 Axes>,
 array([<matplotlib.axes._subplots.AxesSubplot object at 0x7f8b65a85dd8>,
        <matplotlib.axes._subplots.AxesSubplot object at 0x7f8b65ac66d8>,
        <matplotlib.axes._subplots.AxesSubplot object at 0x7f8b65ada908>],
       dtype=object))
In [404]:
surfactant_shell_pmd
Out[404]:
<Structure 5765 atoms; 3961 residues; 2024 bonds; NOT parametrized>

Batch processing: Parametric jobs

Generate parameter sets

In [47]:
R # Angstrom
Out[47]:
26.390609083217864
In [48]:
A_Ang = 4*np.pi*R**2 # area in Ansgtrom
In [49]:
A_nm = A_Ang / 10**2
In [50]:
A_nm
Out[50]:
87.52027857294837
In [51]:
n_per_nm_sq = np.array([0.5,1.0,1.5,2.0,2.5,3.0,3.5,4.0,4.5,5.0,5.5,6.0]) # molecules per square nm
In [52]:
N = np.round(A_nm*n_per_nm_sq).astype(int)
In [53]:
N # molecule numbers corresponding to surface concentrations
Out[53]:
array([ 44,  88, 131, 175, 219, 263, 306, 350, 394, 438, 481, 525])

Provide PACKMOL template

In [54]:
project_id = 'juwels-packmol-2020-03-09'
In [17]:
# queries to the data base are simple dictionaries
query = {
    'metadata.project': project_id,
}
In [18]:
# use underlying MongoDB functionality to check total number of documents matching query
fp.filepad.count_documents(query)
Out[18]:
19
In [159]:
infile_prefix = os.path.join(prefix,'packmol_infiles')
In [160]:
infiles = sorted(glob.glob(os.path.join(infile_prefix,'*.inp')))

files = { os.path.basename(f): f for f in infiles }

# metadata common to all these files 
metadata = {
    'project': project_id,
    'type': 'template'
}

fp_files = []

# insert these input files into data base
for name, file_path in files.items():
    identifier = '/'.join((project_id,name)) # identifier is like a path on a file system
    metadata["name"] = name
    fp_files.append( fp.add_file(file_path,identifier=identifier,metadata = metadata) )
In [224]:
# queries to the data base are simple dictionaries
query = {
    'metadata.project': project_id,
    'metadata.type': 'template'
}

# use underlying MongoDB functionality to check total number of documents matching query
fp.filepad.count_documents(query)
Out[224]:
1
In [171]:
print(identifier)
juwels-packmol-2020-03-09/surfactants_on_sphere.inp
In [172]:
# on a lower level, each object has a unique "GridFS id":
pprint(fp_files) # underlying GridFS id and readable identifiers
[('5e66570411940f3ff823ef88',
  'juwels-packmol-2020-03-09/surfactants_on_sphere.inp')]
In [144]:
# settings can be overridden
for n in N:
    packmol_script_context = {
        'header':        '{:s} packing SDS around AFM probe model'.format(project_id),
        'system_name':   '{:d}_SDS_on_50_Ang_AFM_tip_model'.format(n),
        'tolerance':     tolerance,
        'write_restart': True,

        'static_components': [
            {
                'name': 'indenter_reres'
            }
        ]
    }

    # use pack_sphere function at the notebook's head to generate template context
    packmol_script_context.update(
        pack_sphere(
            C,R_inner_constraint,R_outer_constraint, n, 
            tail_atom_number, head_atom_number, surfactant, counterion, tolerance))
INFO:__main__:sphere with 44 surfactant molecules in total.
INFO:root:sphere with 44 molecules at [-0.02151743 -0.17756268  0.46946046], radius 45.90747087934147
INFO:__main__:sphere with 88 surfactant molecules in total.
INFO:root:sphere with 88 molecules at [-0.02151743 -0.17756268  0.46946046], radius 45.90747087934147
INFO:__main__:sphere with 131 surfactant molecules in total.
INFO:root:sphere with 131 molecules at [-0.02151743 -0.17756268  0.46946046], radius 45.90747087934147
INFO:__main__:sphere with 175 surfactant molecules in total.
INFO:root:sphere with 175 molecules at [-0.02151743 -0.17756268  0.46946046], radius 45.90747087934147
INFO:__main__:sphere with 219 surfactant molecules in total.
INFO:root:sphere with 219 molecules at [-0.02151743 -0.17756268  0.46946046], radius 45.90747087934147
INFO:__main__:sphere with 263 surfactant molecules in total.
INFO:root:sphere with 263 molecules at [-0.02151743 -0.17756268  0.46946046], radius 45.90747087934147
INFO:__main__:sphere with 306 surfactant molecules in total.
INFO:root:sphere with 306 molecules at [-0.02151743 -0.17756268  0.46946046], radius 45.90747087934147
INFO:__main__:sphere with 350 surfactant molecules in total.
INFO:root:sphere with 350 molecules at [-0.02151743 -0.17756268  0.46946046], radius 45.90747087934147
INFO:__main__:sphere with 394 surfactant molecules in total.
INFO:root:sphere with 394 molecules at [-0.02151743 -0.17756268  0.46946046], radius 45.90747087934147
INFO:__main__:sphere with 438 surfactant molecules in total.
INFO:root:sphere with 438 molecules at [-0.02151743 -0.17756268  0.46946046], radius 45.90747087934147
INFO:__main__:sphere with 481 surfactant molecules in total.
INFO:root:sphere with 481 molecules at [-0.02151743 -0.17756268  0.46946046], radius 45.90747087934147
INFO:__main__:sphere with 525 surfactant molecules in total.
INFO:root:sphere with 525 molecules at [-0.02151743 -0.17756268  0.46946046], radius 45.90747087934147

Provide data files

In [272]:
data_prefix = os.path.join(prefix,'packmol_datafiles')
In [273]:
datafiles = sorted(glob.glob(os.path.join(data_prefix,'*')))

files = { os.path.basename(f): f for f in datafiles }

# metadata common to all these files 
metadata = {
    'project': project_id,
    'type': 'data'
}

fp_files = []

# insert these input files into data base
for name, file_path in files.items():
    identifier = '/'.join((project_id,name)) # identifier is like a path on a file system
    metadata["name"] = name
    fp_files.append( fp.add_file(file_path,identifier=identifier,metadata = metadata) )
2020-03-09 18:09:50,170 WARNING identifier: juwels-packmol-2020-03-09/1_SDS.pdb exists. Skipping insertion
WARNING:filepad:identifier: juwels-packmol-2020-03-09/1_SDS.pdb exists. Skipping insertion
2020-03-09 18:09:50,186 WARNING identifier: juwels-packmol-2020-03-09/indenter_reres.pdb exists. Skipping insertion
WARNING:filepad:identifier: juwels-packmol-2020-03-09/indenter_reres.pdb exists. Skipping insertion
In [274]:
fp_files
Out[274]:
[('5e66785e11940f3ff823ef9b', 'juwels-packmol-2020-03-09/1_NA.pdb'),
 ('5e6669c111940f3ff823ef8b', 'juwels-packmol-2020-03-09/1_SDS.pdb'),
 ('5e6669c111940f3ff823ef8e', 'juwels-packmol-2020-03-09/indenter_reres.pdb')]

Span parameter sets

In [485]:
machine = 'juwels_devel'
In [480]:
parametric_dimension_labels = ['nmolecules']
In [481]:
parametric_dimensions = [ {
    'nmolecules': N } ]
In [458]:
# for testing
parametric_dimensions = [ {
    'nmolecules': [N[0]] } ]
In [482]:
parameter_sets = list( 
    itertools.chain(*[ 
            itertools.product(*list(
                    p.values())) for p in parametric_dimensions ]) )

parameter_dict_sets = [ dict(zip(parametric_dimension_labels,s)) for s in parameter_sets ]
In [486]:
wf_name = 'PACKMOL {machine:}, {id:}'.format(machine=machine,id=project_id)

fw_name_template = 'nmolecules: {nmolecules:d}'

fw_list = []

fts = [ 
        GetFilesByQueryTask(
            query = {
                'metadata->project': project_id,
                'metadata->name':    'surfactants_on_sphere.inp'
            },
            limit = 1,
            new_file_names = ['input.template'] ),
        GetFilesByQueryTask(
            query = {
                'metadata->project': project_id,
                'metadata->name':    'indenter_reres.pdb'
            },
            limit = 1,
            new_file_names = ['indenter.pdb'] ),
        GetFilesByQueryTask(
            query = {
                'metadata->project': project_id,
                'metadata->name':    '1_SDS.pdb'
            },
            limit = 1,
            new_file_names = ['1_SDS.pdb'] ),
        GetFilesByQueryTask(
            query = {
                'metadata->project': project_id,
                'metadata->name':    '1_NA.pdb'
            },
            limit = 1,
            new_file_names = ['1_NA.pdb'] )
        ]

files_out = {
    'input_file': 'input.template',
    'indenter_file': 'indenter.pdb',
    'surfatcant_file': '1_SDS.pdb',
    'counterion_file': '1_NA.pdb'}

fw_root = Firework(fts,
    name = wf_name,
    spec = {
        '_category': hpc_max_specs[machine]['fw_noqueue_category'],
        '_files_out': files_out, 
        'metadata': {
          'project': project_id,
          'datetime': str(datetime.datetime.now()),
          'step':    'input_file_query'
        }
    }
)

fw_list.append(fw_root)

## Parametric sweep

for d in parameter_dict_sets:        
    
### Template
    
    files_in = {'input_file': 'input.template' }
    files_out = { 'input_file': 'input.inp' }
    
    # exports = std_exports[machine].copy()
        
    # Jinja2 context:
    packmol_script_context = {
        'header':        '{:s} packing SDS around AFM probe model'.format(project_id),
        'system_name':   '{:d}_SDS_on_50_Ang_AFM_tip_model'.format(n),
        'tolerance':     tolerance,
        'write_restart': True,

        'static_components': [
            {
                'name': 'indenter'
            }
        ]
    }

    # use pack_sphere function at the notebook's head to generate template context
    packmol_script_context.update(
        pack_sphere(
            C,R_inner_constraint,R_outer_constraint, d["nmolecules"], 
            tail_atom_number+1, head_atom_number+1, surfactant, counterion, tolerance))
    
    ft_template = TemplateWriterTask( {
        'context': packmol_script_context,
        'template_file': 'input.template',
        'template_dir': '.',
        'output_file': 'input.inp'} )
    
    
    fw_template = Firework([ft_template],
        name = ', '.join(('template', fw_name_template.format(**d))),
        spec = {
            '_category': hpc_max_specs[machine]['fw_noqueue_category'],
            '_files_in': files_in,
            '_files_out': files_out, 
            'metadata': {
                'project': project_id,
                'datetime': str(datetime.datetime.now()),
                'step':    'fill_template',
                 **d
            }
        },
        parents = [ fw_root ] )
    
    fw_list.append(fw_template)

### PACKMOL

    files_in = {
        'input_file': 'input.inp',
        'indenter_file': 'indenter.pdb',
        'surfatcant_file': '1_SDS.pdb',
        'counterion_file': '1_NA.pdb' }
    files_out = {
        'data_file': '*_packmol.pdb'}
    
    ft_pack = CmdTask(
        cmd='packmol',
        opt=['< input.inp'],
        stderr_file  = 'std.err',
        stdout_file  = 'std.out',
        store_stdout = True,
        store_stderr = True,
        use_shell    = True,
        fizzle_bad_rc= True)
  
    fw_pack = Firework([ft_pack],
        name = ', '.join(('packmol', fw_name_template.format(**d))),
        spec = {
            '_category': hpc_max_specs[machine]['fw_queue_category'],
            '_queueadapter': {
                'queue':           hpc_max_specs[machine]['queue'],
                'walltime' :       hpc_max_specs[machine]['walltime'],
                'ntasks':          1,
            },
            '_files_in':  files_in,
            '_files_out': files_out,
            'metadata': {
                'project': project_id,
                'datetime': str(datetime.datetime.now()),
                'step':    'packmol',
                 **d
            }
        },
        parents = [ fw_root, fw_template] )
    
    fw_list.append(fw_pack)

### Store

    files_in = {'data_file': 'packed.pdb' }
    
    ft_transfer = AddFilesTask( {
        'compress': True ,
        'paths': "packed.pdb",
        'metadata': {
            'project': project_id,
            'datetime': str(datetime.datetime.now()),
            'type':    'initial_config',
             **d } 
        } )
    
    fw_transfer = Firework([ft_transfer],
        name = ', '.join(('transfer', fw_name_template.format(**d))),
        spec = {
            '_category': hpc_max_specs[machine]['fw_noqueue_category'],
            '_files_in': files_in, 
            'metadata': {
                'project': project_id,
                'datetime': str(datetime.datetime.now()),
                'step':    'transfer',
                 **d
            }
        },
        parents = [ fw_pack ] )
        
    fw_list.append(fw_transfer)

wf = Workflow(fw_list,
    name = wf_name,
    metadata = {
        'project': project_id,
        'datetime': str(datetime.datetime.now()),
        'type':    'packing'
    })
In [488]:
wf.to_file('packing.json')
In [489]:
lp.add_wf(wf)
2020-03-09 23:30:50,388 INFO Added a workflow. id_map: {-90: 24016, -89: 24017, -88: 24018, -87: 24019, -86: 24020, -85: 24021, -84: 24022, -83: 24023, -82: 24024, -81: 24025, -80: 24026, -79: 24027, -78: 24028, -77: 24029, -76: 24030, -75: 24031, -74: 24032, -73: 24033, -72: 24034, -71: 24035, -70: 24036, -69: 24037, -68: 24038, -67: 24039, -66: 24040, -65: 24041, -64: 24042, -63: 24043, -62: 24044, -61: 24045, -60: 24046, -59: 24047, -58: 24048, -57: 24049, -56: 24050, -55: 24051, -54: 24052}
INFO:launchpad:Added a workflow. id_map: {-90: 24016, -89: 24017, -88: 24018, -87: 24019, -86: 24020, -85: 24021, -84: 24022, -83: 24023, -82: 24024, -81: 24025, -80: 24026, -79: 24027, -78: 24028, -77: 24029, -76: 24030, -75: 24031, -74: 24032, -73: 24033, -72: 24034, -71: 24035, -70: 24036, -69: 24037, -68: 24038, -67: 24039, -66: 24040, -65: 24041, -64: 24042, -63: 24043, -62: 24044, -61: 24045, -60: 24046, -59: 24047, -58: 24048, -57: 24049, -56: 24050, -55: 24051, -54: 24052}
Out[489]:
{-90: 24016,
 -89: 24017,
 -88: 24018,
 -87: 24019,
 -86: 24020,
 -85: 24021,
 -84: 24022,
 -83: 24023,
 -82: 24024,
 -81: 24025,
 -80: 24026,
 -79: 24027,
 -78: 24028,
 -77: 24029,
 -76: 24030,
 -75: 24031,
 -74: 24032,
 -73: 24033,
 -72: 24034,
 -71: 24035,
 -70: 24036,
 -69: 24037,
 -68: 24038,
 -67: 24039,
 -66: 24040,
 -65: 24041,
 -64: 24042,
 -63: 24043,
 -62: 24044,
 -61: 24045,
 -60: 24046,
 -59: 24047,
 -58: 24048,
 -57: 24049,
 -56: 24050,
 -55: 24051,
 -54: 24052}

Inspect sweep results

In [31]:
query = { 
    "metadata.project": project_id,
}
fp.filepad.count_documents(query)
Out[31]:
19
In [32]:
query = { 
    "metadata.project": project_id,
    "metadata.type":    'initial_config',
}
fp.filepad.count_documents(query)
Out[32]:
15
In [33]:
parameter_names = ['nmolecules']
In [34]:
surfactant_shell_pmd_list = []

match_aggregation = {
        "$match": query
    }
sort_aggregation = {
        "$sort": { 
            "metadata.datetime": pymongo.DESCENDING,
        }
    }
group_aggregation = { 
    "$group": { 
        "_id": { p: '$metadata.{}'.format(p) for p in parameter_names },
        "degeneracy": {"$sum": 1}, # number matching data sets
        "latest":     {"$first": "$gfs_id"} # unique gridfs id of file
    }
}
aggregation_pipeline = [ match_aggregation, sort_aggregation, group_aggregation ]
cursor = fp.filepad.aggregate(aggregation_pipeline)

for i, c in enumerate(cursor): 
    content, metadata = fp.get_file_by_id(c["latest"])
    with tempfile.NamedTemporaryFile() as tmp:
        tmp.write(content)
        surfactant_shell_pmd_list.append(pmd.load_file(tmp.name))
        
    print('.',end='')
print('')
    
............
In [80]:
system_selection = surfactant_shell_pmd_list
nx = 3
ny = len(system_selection)
view_labels = ['xy','xz','yz']

molecule_counter = lambda s: np.count_nonzero([r.name == 'SDS' for r in s.residues])

label_generator = lambda i,j: '{:d} SDS, {:s} projection'.format(
    molecule_counter(system_selection[i]),view_labels[j])

figsize = (4*nx,4*ny)
fig, axes = plt.subplots(ny,3,figsize=figsize)

for i,system in enumerate(system_selection):
    system_ase = ase.Atoms(
        numbers=[1 if a.atomic_number == 0 else a.atomic_number for a in system.atoms],
        positions=system.get_coordinates(0))
    
    C_shell, R_sq_shell = miniball.get_bounding_ball(system_ase.get_positions())
    R_shell = np.sqrt(R_sq_shell)
    plot_side_views_with_spheres(
        system_ase,[C,C_shell],[R,R_shell],fig=fig,ax=axes[i,:])
    
    for j, ax in enumerate(axes[i,:]):
        ax.set_title(label_generator(i,j))
        
    del system_ase
    gc.collect()
INFO:__main__:C((2, 3)) = [[-0.02151743 -0.17756268  0.46946046]
 [-0.02417996 -0.17740608  0.4699541 ]]
INFO:__main__:R((2,)) = [26.39060908 47.90815226]
INFO:__main__:xmin((3,)) = [-47.728 -45.331 -45.846]
INFO:__main__:xmax((3,)) = [41.8   43.986 45.539]
INFO:__main__:projected cc((2, 3, 2)) = [[[50.46968257 47.91136232]
  [49.12508546 50.46968257]
  [47.91136232 49.12508546]]

 [[50.46702004 47.91151892]
  [49.1255791  50.46702004]
  [47.91151892 49.1255791 ]]]
INFO:__main__:projected bb((3, 2, 2)) = [[[ -2.23194745 103.16598753]
  [ -4.78744857 100.61048641]]

 [[ -3.57338839 101.82454659]
  [ -2.23194745 103.16598753]]

 [[ -4.78744857 100.61048641]
  [ -3.57338839 101.82454659]]]
INFO:__main__:iterators len(atom_permut=3, len(ax)=3, len(rot)=3, len(circle)=2
INFO:__main__:len(circle[0])=3
INFO:__main__:len(circle[1])=3
INFO:__main__:len(circle[0])=3
INFO:__main__:len(circle[1])=3
INFO:__main__:len(circle[0])=3
INFO:__main__:len(circle[1])=3
INFO:__main__:C((2, 3)) = [[-0.02151743 -0.17756268  0.46946046]
 [-0.02219909 -0.17737292  0.46837777]]
INFO:__main__:R((2,)) = [26.39060908 47.9073083 ]
INFO:__main__:xmin((3,)) = [-44.436 -45.827 -46.49 ]
INFO:__main__:xmax((3,)) = [46.161 45.795 46.379]
INFO:__main__:projected cc((2, 3, 2)) = [[[47.20440757 48.46498732]
  [49.80618546 47.20440757]
  [48.46498732 49.80618546]]

 [[47.20372591 48.46517708]
  [49.80510277 47.20372591]
  [48.46517708 49.80510277]]]
INFO:__main__:projected bb((3, 2, 2)) = [[[ -5.49431323  99.90176504]
  [ -4.23286205 101.16321622]]

 [[ -2.89293637 102.5031419 ]
  [ -5.49431323  99.90176504]]

 [[ -4.23286205 101.16321622]
  [ -2.89293637 102.5031419 ]]]
INFO:__main__:iterators len(atom_permut=3, len(ax)=3, len(rot)=3, len(circle)=2
INFO:__main__:len(circle[0])=3
INFO:__main__:len(circle[1])=3
INFO:__main__:len(circle[0])=3
INFO:__main__:len(circle[1])=3
INFO:__main__:len(circle[0])=3
INFO:__main__:len(circle[1])=3
INFO:__main__:C((2, 3)) = [[-0.02151743 -0.17756268  0.46946046]
 [-0.02274395 -0.1828538   0.47173744]]
INFO:__main__:R((2,)) = [26.39060908 47.91206848]
INFO:__main__:xmin((3,)) = [-47.644 -47.524 -45.863]
INFO:__main__:xmax((3,)) = [46.493 46.984 47.589]
INFO:__main__:projected cc((2, 3, 2)) = [[[50.50090757 50.23413732]
  [49.19376046 50.50090757]
  [50.23413732 49.19376046]]

 [[50.49968105 50.2288462 ]
  [49.19603744 50.49968105]
  [50.2288462  49.19603744]]]
INFO:__main__:projected bb((3, 2, 2)) = [[[ -2.20359428 103.20295638]
  [ -2.47442913 102.93212153]]

 [[ -3.50723789 101.89931276]
  [ -2.20359428 103.20295638]]

 [[ -2.47442913 102.93212153]
  [ -3.50723789 101.89931276]]]
INFO:__main__:iterators len(atom_permut=3, len(ax)=3, len(rot)=3, len(circle)=2
INFO:__main__:len(circle[0])=3
INFO:__main__:len(circle[1])=3
INFO:__main__:len(circle[0])=3
INFO:__main__:len(circle[1])=3
INFO:__main__:len(circle[0])=3
INFO:__main__:len(circle[1])=3
INFO:__main__:C((2, 3)) = [[-0.02151743 -0.17756268  0.46946046]
 [-0.02210339 -0.17803104  0.46914684]]
INFO:__main__:R((2,)) = [26.39060908 47.90741571]
INFO:__main__:xmin((3,)) = [-46.961 -46.662 -46.281]
INFO:__main__:xmax((3,)) = [45.926 46.984 47.533]
INFO:__main__:projected cc((2, 3, 2)) = [[[49.78665757 49.35058732]
  [49.62081046 49.78665757]
  [49.35058732 49.62081046]]

 [[49.78607161 49.35011896]
  [49.62049684 49.78607161]
  [49.35011896 49.62049684]]]
INFO:__main__:projected bb((3, 2, 2)) = [[[ -2.91208567 102.4842289 ]
  [ -3.34803833 102.04827624]]

 [[ -3.07766045 102.31865412]
  [ -2.91208567 102.4842289 ]]

 [[ -3.34803833 102.04827624]
  [ -3.07766045 102.31865412]]]
INFO:__main__:iterators len(atom_permut=3, len(ax)=3, len(rot)=3, len(circle)=2
INFO:__main__:len(circle[0])=3
INFO:__main__:len(circle[1])=3
INFO:__main__:len(circle[0])=3
INFO:__main__:len(circle[1])=3
INFO:__main__:len(circle[0])=3
INFO:__main__:len(circle[1])=3
INFO:__main__:C((2, 3)) = [[-0.02151743 -0.17756268  0.46946046]
 [-0.02203575 -0.17795392  0.46912421]]
INFO:__main__:R((2,)) = [26.39060908 47.90747626]
INFO:__main__:xmin((3,)) = [-46.889 -46.662 -46.723]
INFO:__main__:xmax((3,)) = [46.536 46.984 47.533]
INFO:__main__:projected cc((2, 3, 2)) = [[[49.72810757 49.35058732]
  [50.07386046 49.72810757]
  [49.35058732 50.07386046]]

 [[49.72758925 49.35019608]
  [50.07352421 49.72758925]
  [49.35019608 50.07352421]]]
INFO:__main__:projected bb((3, 2, 2)) = [[[ -2.97063463 102.42581313]
  [ -3.3480278  102.04841996]]

 [[ -2.62469967 102.77174809]
  [ -2.97063463 102.42581313]]

 [[ -3.3480278  102.04841996]
  [ -2.62469967 102.77174809]]]
INFO:__main__:iterators len(atom_permut=3, len(ax)=3, len(rot)=3, len(circle)=2
INFO:__main__:len(circle[0])=3
INFO:__main__:len(circle[1])=3
INFO:__main__:len(circle[0])=3
INFO:__main__:len(circle[1])=3
INFO:__main__:len(circle[0])=3
INFO:__main__:len(circle[1])=3
INFO:__main__:C((2, 3)) = [[-0.02151743 -0.17756268  0.46946046]
 [-0.02203221 -0.17776492  0.46879484]]
INFO:__main__:R((2,)) = [26.39060908 47.90724084]
INFO:__main__:xmin((3,)) = [-47.687 -47.169 -46.483]
INFO:__main__:xmax((3,)) = [45.99  47.111 47.581]
INFO:__main__:projected cc((2, 3, 2)) = [[[50.53240757 49.87343732]
  [49.82906046 50.53240757]
  [49.87343732 49.82906046]]

 [[50.53189279 49.87323508]
  [49.82839484 50.53189279]
  [49.87323508 49.82839484]]]
INFO:__main__:projected bb((3, 2, 2)) = [[[ -2.16607213 103.22985771]
  [ -2.82472984 102.5712    ]]

 [[ -2.86957008 102.52635976]
  [ -2.16607213 103.22985771]]

 [[ -2.82472984 102.5712    ]
  [ -2.86957008 102.52635976]]]
INFO:__main__:iterators len(atom_permut=3, len(ax)=3, len(rot)=3, len(circle)=2
INFO:__main__:len(circle[0])=3
INFO:__main__:len(circle[1])=3
INFO:__main__:len(circle[0])=3
INFO:__main__:len(circle[1])=3
INFO:__main__:len(circle[0])=3
INFO:__main__:len(circle[1])=3
INFO:__main__:C((2, 3)) = [[-0.02151743 -0.17756268  0.46946046]
 [-0.02176655 -0.17787202  0.46871832]]
INFO:__main__:R((2,)) = [26.39060908 47.90715395]
INFO:__main__:xmin((3,)) = [-47.644 -47.524 -46.168]
INFO:__main__:xmax((3,)) = [46.477 47.148 47.583]
INFO:__main__:projected cc((2, 3, 2)) = [[[50.50050757 50.23823732]
  [49.50623546 50.50050757]
  [50.23823732 49.50623546]]

 [[50.50025845 50.23792798]
  [49.50549332 50.50025845]
  [50.23792798 49.50549332]]]
INFO:__main__:projected bb((3, 2, 2)) = [[[ -2.1976109  103.19812779]
  [ -2.45994137 102.93579732]]

 [[ -3.19237603 102.20336266]
  [ -2.1976109  103.19812779]]

 [[ -2.45994137 102.93579732]
  [ -3.19237603 102.20336266]]]
INFO:__main__:iterators len(atom_permut=3, len(ax)=3, len(rot)=3, len(circle)=2
INFO:__main__:len(circle[0])=3
INFO:__main__:len(circle[1])=3
INFO:__main__:len(circle[0])=3
INFO:__main__:len(circle[1])=3
INFO:__main__:len(circle[0])=3
INFO:__main__:len(circle[1])=3
INFO:__main__:C((2, 3)) = [[-0.02151743 -0.17756268  0.46946046]
 [-0.01802589 -0.17439326  0.46821077]]
INFO:__main__:R((2,)) = [26.39060908 47.90696973]
INFO:__main__:xmin((3,)) = [-44.063 -44.026 -45.384]
INFO:__main__:xmax((3,)) = [44.771 46.429 45.946]
INFO:__main__:projected cc((2, 3, 2)) = [[[46.78733257 46.63481232]
  [48.66171046 46.78733257]
  [46.63481232 48.66171046]]

 [[46.79082411 46.63798174]
  [48.66046077 46.79082411]
  [46.63798174 48.66046077]]]
INFO:__main__:projected bb((3, 2, 2)) = [[[ -5.90684259  99.48849081]
  [ -6.05968496  99.33564843]]

 [[ -4.03720593 101.35812747]
  [ -5.90684259  99.48849081]]

 [[ -6.05968496  99.33564843]
  [ -4.03720593 101.35812747]]]
INFO:__main__:iterators len(atom_permut=3, len(ax)=3, len(rot)=3, len(circle)=2
INFO:__main__:len(circle[0])=3
INFO:__main__:len(circle[1])=3
INFO:__main__:len(circle[0])=3
INFO:__main__:len(circle[1])=3
INFO:__main__:len(circle[0])=3
INFO:__main__:len(circle[1])=3
INFO:__main__:C((2, 3)) = [[-0.02151743 -0.17756268  0.46946046]
 [-0.0220251  -0.17767878  0.46913624]]
INFO:__main__:R((2,)) = [26.39060908 47.90754985]
INFO:__main__:xmin((3,)) = [-47.644 -47.524 -45.863]
INFO:__main__:xmax((3,)) = [46.477 47.148 46.846]
INFO:__main__:projected cc((2, 3, 2)) = [[[50.50050757 50.23823732]
  [49.17518546 50.50050757]
  [50.23823732 49.17518546]]

 [[50.4999999  50.23812122]
  [49.17486124 50.4999999 ]
  [50.23812122 49.17486124]]]
INFO:__main__:projected bb((3, 2, 2)) = [[[ -2.19830493 103.19830473]
  [ -2.46018361 102.93642605]]

 [[ -3.52344359 101.87316607]
  [ -2.19830493 103.19830473]]

 [[ -2.46018361 102.93642605]
  [ -3.52344359 101.87316607]]]
INFO:__main__:iterators len(atom_permut=3, len(ax)=3, len(rot)=3, len(circle)=2
INFO:__main__:len(circle[0])=3
INFO:__main__:len(circle[1])=3
INFO:__main__:len(circle[0])=3
INFO:__main__:len(circle[1])=3
INFO:__main__:len(circle[0])=3
INFO:__main__:len(circle[1])=3
INFO:__main__:C((2, 3)) = [[-0.02151743 -0.17756268  0.46946046]
 [-0.02210298 -0.17785273  0.46891523]]
INFO:__main__:R((2,)) = [26.39060908 47.90737648]
INFO:__main__:xmin((3,)) = [-45.909 -47.166 -46.483]
INFO:__main__:xmax((3,)) = [46.314 47.048 47.581]
INFO:__main__:projected cc((2, 3, 2)) = [[[48.71805757 49.86878732]
  [49.82906046 48.71805757]
  [49.86878732 49.82906046]]

 [[48.71747202 49.86849727]
  [49.82851523 48.71747202]
  [49.86849727 49.82851523]]]
INFO:__main__:projected bb((3, 2, 2)) = [[[ -3.98064211 101.41558615]
  [ -2.82961686 102.5666114 ]]

 [[ -2.8695989  102.52662936]
  [ -3.98064211 101.41558615]]

 [[ -2.82961686 102.5666114 ]
  [ -2.8695989  102.52662936]]]
INFO:__main__:iterators len(atom_permut=3, len(ax)=3, len(rot)=3, len(circle)=2
INFO:__main__:len(circle[0])=3
INFO:__main__:len(circle[1])=3
INFO:__main__:len(circle[0])=3
INFO:__main__:len(circle[1])=3
INFO:__main__:len(circle[0])=3
INFO:__main__:len(circle[1])=3
INFO:__main__:C((2, 3)) = [[-0.02151743 -0.17756268  0.46946046]
 [-0.02231784 -0.17777521  0.46858998]]
INFO:__main__:R((2,)) = [26.39060908 47.90726489]
INFO:__main__:xmin((3,)) = [-44.448 -46.493 -45.928]
INFO:__main__:xmax((3,)) = [46.706 46.308 46.378]
INFO:__main__:projected cc((2, 3, 2)) = [[[47.23033257 49.16046232]
  [49.23011046 47.23033257]
  [49.16046232 49.23011046]]

 [[47.22953216 49.16024979]
  [49.22923998 47.22953216]
  [49.16024979 49.22923998]]]
INFO:__main__:projected bb((3, 2, 2)) = [[[ -5.46845922  99.92752354]
  [ -3.53774159 101.85824118]]

 [[ -3.4687514  101.92723137]
  [ -5.46845922  99.92752354]]

 [[ -3.53774159 101.85824118]
  [ -3.4687514  101.92723137]]]
INFO:__main__:iterators len(atom_permut=3, len(ax)=3, len(rot)=3, len(circle)=2
INFO:__main__:len(circle[0])=3
INFO:__main__:len(circle[1])=3
INFO:__main__:len(circle[0])=3
INFO:__main__:len(circle[1])=3
INFO:__main__:len(circle[0])=3
INFO:__main__:len(circle[1])=3
INFO:__main__:C((2, 3)) = [[-0.02151743 -0.17756268  0.46946046]
 [-0.02218884 -0.17822281  0.46903154]]
INFO:__main__:R((2,)) = [26.39060908 47.90727646]
INFO:__main__:xmin((3,)) = [-45.805 -46.628 -47.38 ]
INFO:__main__:xmax((3,)) = [45.14  47.048 46.547]
INFO:__main__:projected cc((2, 3, 2)) = [[[48.58210757 49.31733732]
  [50.72263546 48.58210757]
  [49.31733732 50.72263546]]

 [[48.58143616 49.31667719]
  [50.72220654 48.58143616]
  [49.31667719 50.72220654]]]
INFO:__main__:projected bb((3, 2, 2)) = [[[ -4.11656794 101.27944027]
  [ -3.38132691 102.0146813 ]]

 [[ -1.97579756 103.42021065]
  [ -4.11656794 101.27944027]]

 [[ -3.38132691 102.0146813 ]
  [ -1.97579756 103.42021065]]]
INFO:__main__:iterators len(atom_permut=3, len(ax)=3, len(rot)=3, len(circle)=2
INFO:__main__:len(circle[0])=3
INFO:__main__:len(circle[1])=3
INFO:__main__:len(circle[0])=3
INFO:__main__:len(circle[1])=3
INFO:__main__:len(circle[0])=3
INFO:__main__:len(circle[1])=3
In [108]:
del fig
del axes

Prepare a Gromacs-processible system

In [81]:
gromacs.config.logfilename
Out[81]:
'gromacs.log'
In [82]:
gromacs.environment.flags
Out[82]:
[('capture_output', False), ('capture_output_filename', 'gromacs_captured_output.txt')]
In [83]:
# if true, then stdout and stderr are returned as strings by gromacs wrapper commands
gromacs.environment.flags['capture_output'] = False
In [84]:
print(gromacs.release())
2018.1
In [85]:
prefix
Out[85]:
'/mnt/dat/work/testuser/indenter/sandbox/20191110_packmol'
In [95]:
system = '200_SDS_on_50_Ang_AFM_tip_model'
pdb = system + '.pdb'
gro = system + '.gro'
top = system + '.top'
posre = system + '.posre.itp'

Tidy up packmol's non-standard pdb

In [55]:
# Remove any chain ID from pdb and tidy up
pdb_chain = subprocess.Popen(['pdb_chain',],
        stdin=open(packmol_pdb,'r'),stdout=subprocess.PIPE, stderr=subprocess.PIPE,
        cwd=prefix, encoding='utf-8')
pdb_tidy = subprocess.Popen(['pdb_tidy',],
        stdin=pdb_chain.stdout,stdout=open(pdb,'w'), stderr=subprocess.PIPE,
        cwd=prefix, encoding='utf-8')
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-55-d4e66f74f704> in <module>
      1 # Remove any chain ID from pdb and tidy up
      2 pdb_chain = subprocess.Popen(['pdb_chain',],
----> 3         stdin=open(packmol_pdb,'r'),stdout=subprocess.PIPE, stderr=subprocess.PIPE,
      4         cwd=prefix, encoding='utf-8')
      5 pdb_tidy = subprocess.Popen(['pdb_tidy',],

TypeError: expected str, bytes or os.PathLike object, not _TemporaryFileWrapper

Generate Gromacs .gro and .top

In [418]:
rc,out,err=gromacs.pdb2gmx(
    f=pdb,o=gro,p=top,i=posre,ff='charmm36',water='tip3p',
    stdout=False,stderr=False)
In [419]:
print(out)
Using the Charmm36 force field in directory /opt/apps/gromacs-top/jlh-2018.1/share/gromacs/top/charmm36.ff

Reading 200_SDS_on_50_Ang_AFM_tip_model.pdb...
Read 'Built with Packmol', 12473 atoms
Analyzing pdb file
Splitting chemical chains based on TER records or chain id changing.
There are 1 chains and 0 blocks of water and 4273 residues with 12473 atoms

  chain  #res #atoms
  1 ' '  4273  12473  

Reading residue database... (charmm36)
Processing chain 1 (12473 atoms, 4273 residues)

Warning: Starting residue AUM1 in chain not identified as Protein/RNA/DNA.
This chain lacks identifiers, which makes it impossible to do strict
classification of the start/end residues. Here we need to guess this residue
should not be part of the chain and instead introduce a break, but that will
be catastrophic if they should in fact be linked. Please check your structure,
and add AUM to residuetypes.dat if this was not correct.


Warning: Starting residue AUM2 in chain not identified as Protein/RNA/DNA.
This chain lacks identifiers, which makes it impossible to do strict
classification of the start/end residues. Here we need to guess this residue
should not be part of the chain and instead introduce a break, but that will
be catastrophic if they should in fact be linked. Please check your structure,
and add AUM to residuetypes.dat if this was not correct.


Warning: Starting residue AUM3 in chain not identified as Protein/RNA/DNA.
This chain lacks identifiers, which makes it impossible to do strict
classification of the start/end residues. Here we need to guess this residue
should not be part of the chain and instead introduce a break, but that will
be catastrophic if they should in fact be linked. Please check your structure,
and add AUM to residuetypes.dat if this was not correct.


Warning: Starting residue AUM4 in chain not identified as Protein/RNA/DNA.
This chain lacks identifiers, which makes it impossible to do strict
classification of the start/end residues. Here we need to guess this residue
should not be part of the chain and instead introduce a break, but that will
be catastrophic if they should in fact be linked. Please check your structure,
and add AUM to residuetypes.dat if this was not correct.


Warning: Starting residue AUM5 in chain not identified as Protein/RNA/DNA.
This chain lacks identifiers, which makes it impossible to do strict
classification of the start/end residues. Here we need to guess this residue
should not be part of the chain and instead introduce a break, but that will
be catastrophic if they should in fact be linked. Please check your structure,
and add AUM to residuetypes.dat if this was not correct.

Disabling further warnings about unidentified residues at start of chain.
Residue NA4074 has type 'Ion', assuming it is not linked into a chain.
Residue NA4075 has type 'Ion', assuming it is not linked into a chain.
Residue NA4076 has type 'Ion', assuming it is not linked into a chain.
Residue NA4077 has type 'Ion', assuming it is not linked into a chain.
Residue NA4078 has type 'Ion', assuming it is not linked into a chain.
Disabling further notes about ions.
Problem with chain definition, or missing terminal residues.
This chain does not appear to contain a recognized chain molecule.
If this is incorrect, you can edit residuetypes.dat to modify the behavior.
Checking for duplicate atoms....
Generating any missing hydrogen atoms and/or adding termini.
Now there are 4273 residues with 12473 atoms
		--------- PLEASE NOTE ------------
You have successfully generated a topology from: 200_SDS_on_50_Ang_AFM_tip_model.pdb.
The Charmm36 force field and the tip3p water model are used.
		--------- ETON ESAELP ------------

Set simulation box size around system

In [422]:
gro_boxed = system + '_boxed.gro'
In [423]:
rc,out,err=gromacs.editconf(
    f=gro,o=gro_boxed,d=2.0,bt='cubic',
    stdout=False,stderr=False)
In [599]:
print(out)
turning H bonds into constraints...
turning H bonds into constraints...
turning H bonds into constraints...
Analysing residue names:
There are:  3873  Substrate residues
There are:   200 Surfactant residues
There are:   200        Ion residues
Analysing residues not classified as Protein/DNA/RNA/Water and splitting into groups...
Analysing residues not classified as Protein/DNA/RNA/Water and splitting into groups...
Analysing residues not classified as Protein/DNA/RNA/Water and splitting into groups...
Calculating fourier grid dimensions for X Y Z
Using a fourier grid of 120x120x120, spacing 0.113 0.113 0.113
This run will generate roughly 30 Mb of data

Batch processing

In [58]:
machine = 'juwels_devel'
In [59]:
parametric_dimension_labels = ['nmolecules']
In [103]:
parametric_dimensions = [ {
    'nmolecules': N } ]
In [61]:
# for testing
parametric_dimensions = [ {
    'nmolecules': [N[0]] } ]
In [105]:
parameter_sets = list( 
    itertools.chain(*[ 
            itertools.product(*list(
                    p.values())) for p in parametric_dimensions ]) )

parameter_dict_sets = [ dict(zip(parametric_dimension_labels,s)) for s in parameter_sets ]
In [106]:
source_project_id = 'juwels-packmol-2020-03-09'
project_id = 'juwels-gromacs-prep-2020-03-11'
In [107]:
wf_name = 'GROMACS preparations {machine:}, {id:}'.format(machine=machine,id=project_id)

fw_name_template = 'nmolecules: {nmolecules:d}'

fw_list = []

fts = [
    CmdTask(
        cmd='echo',
        opt=['"Dummy root"'],
        store_stdout = False,
        store_stderr = False,
        use_shell    = True,
        fizzle_bad_rc= True) ]
  
files_out = []
    
fw_root = Firework(fts,
    name = wf_name,
    spec = {
        '_category': hpc_max_specs[machine]['fw_noqueue_category'],
        '_files_out': files_out, 
        'metadata': {
          'project': project_id,
          'datetime': str(datetime.datetime.now()),
          'step':    'dummy_root'
        }
    }
)

fw_list.append(fw_root)

## Parametric sweep

for d in parameter_dict_sets:        
    
### File retrieval
    
    #files_in = {'input_file': 'input.template' }
    files_in = {}
    files_out = { 'data_file': 'in.pdb' }
    
    # exports = std_exports[machine].copy()
        
    fts_fetch = [ GetFilesByQueryTask(
            query = {
                'metadata->project':    source_project_id,
                'metadata->type':       'initial_config',
                'metadata->nmolecules': d["nmolecules"]
            },
            sort_key = 'metadata.datetime',
            sort_direction = pymongo.DESCENDING,
            limit = 1,
            new_file_names = ['in.pdb'] ) ]
    
    fw_fetch = Firework(fts_fetch,
        name = ', '.join(('fetch', fw_name_template.format(**d))),
        spec = {
            '_category': hpc_max_specs[machine]['fw_noqueue_category'],
            '_files_in': files_in, 
            '_files_out': files_out, 
            'metadata': {
                'project': project_id,
                'datetime': str(datetime.datetime.now()),
                'step':    'fetch',
                 **d
            }
        },
        parents = [ fw_root ] )
    
    fw_list.append(fw_fetch)
    
### PDB chain

    files_in =  {'data_file': 'in.pdb' }
    files_out = {'data_file': 'out.pdb'}
    
    fts_pdb_chain = CmdTask(
        cmd='pdb_chain',
        opt=['< in.pdb > out.pdb'],
        store_stdout = False,
        store_stderr = False,
        use_shell    = True,
        fizzle_bad_rc= True)
  
    fw_pdb_chain = Firework(fts_pdb_chain,
        name = ', '.join(('pdb_chain', fw_name_template.format(**d))),
        spec = {
            '_category': hpc_max_specs[machine]['fw_noqueue_category'],
            '_files_in':  files_in,
            '_files_out': files_out,
            'metadata': {
                'project': project_id,
                'datetime': str(datetime.datetime.now()),
                'step':    'pdb_chain',
                 **d
            }
        },
        parents = [ fw_fetch ] )
    
    fw_list.append(fw_pdb_chain)
    
### PDB tidy
    files_in =  {'data_file': 'in.pdb' }
    files_out = {'data_file': 'out.pdb'}
    
    fts_pdb_tidy = CmdTask(
        cmd='pdb_tidy',
        opt=['< in.pdb > out.pdb'],
        store_stdout = False,
        store_stderr = False,
        use_shell    = True,
        fizzle_bad_rc= True)
  
    fw_pdb_tidy = Firework(fts_pdb_tidy,
        name = ', '.join(('pdb_tidy', fw_name_template.format(**d))),
        spec = {
            '_category': hpc_max_specs[machine]['fw_noqueue_category'],
            '_files_in':  files_in,
            '_files_out': files_out,
            'metadata': {
                'project': project_id,
                'datetime': str(datetime.datetime.now()),
                'step':    'pdb_tidy',
                 **d
            }
        },
        parents = [ fw_pdb_chain ] )
    
    fw_list.append(fw_pdb_tidy)
    
### GMX pdb2gro
    
    files_in =  {'data_file': 'in.pdb' }
    files_out = {
        'coordinate_file': 'out.gro',
        'topology_file':   'out.top',
        'restraint_file':  'out.posre.itp'}
    
    fts_gmx_pdb2gro = [ CmdTask(
        cmd='gmx',
        opt=['pdb2gmx',
             '-f', 'in.pdb',
             '-o', 'out.gro',
             '-p', 'out.top',
             '-i', 'out.posre.itp', 
             '-ff', 'charmm36',
             '-water' , 'tip3p'],
        stderr_file  = 'std.err',
        stdout_file  = 'std.out',
        store_stdout = True,
        store_stderr = True,
        use_shell    = True,
        fizzle_bad_rc= True) ]
  
    fw_gmx_pdb2gro = Firework(fts_gmx_pdb2gro,
        name = ', '.join(('gmx_pdb2gro', fw_name_template.format(**d))),
        spec = {
            '_category': hpc_max_specs[machine]['fw_noqueue_category'],
            '_files_in':  files_in,
            '_files_out': files_out,
            'metadata': {
                'project': project_id,
                'datetime': str(datetime.datetime.now()),
                'step':    'gmx_pdb2gro',
                 **d
            }
        },
        parents = [ fw_pdb_tidy ] )
    
    fw_list.append(fw_gmx_pdb2gro)
    
    
### GMX editconf
    files_in = {
        'coordinate_file': 'in.gro',
        'topology_file':   'in.top',
        'restraint_file':  'in.posre.itp'}
    files_out = {
        'coordinate_file': 'out.gro',
        'topology_file':   'in.top',
        'restraint_file':  'in.posre.itp'}
    
    fts_gmx_editconf = [ CmdTask(
        cmd='gmx',
        opt=['editconf',
             '-f', 'in.gro',
             '-o', 'out.gro',
             '-d', 2.0, # distance between content and box boundary in nm
             '-bt', 'cubic', # box type
          ],
        stderr_file  = 'std.err',
        stdout_file  = 'std.out',
        store_stdout = True,
        store_stderr = True,
        use_shell    = True,
        fizzle_bad_rc= True) ]
  
    fw_gmx_editconf = Firework(fts_gmx_editconf,
        name = ', '.join(('gmx_editconf', fw_name_template.format(**d))),
        spec = {
            '_category': hpc_max_specs[machine]['fw_noqueue_category'],
            '_files_in':  files_in,
            '_files_out': files_out,
            'metadata': {
                'project': project_id,
                'datetime': str(datetime.datetime.now()),
                'step':    'gmx_editconf',
                 **d
            }
        },
        parents = [ fw_gmx_pdb2gro ] )
    
    fw_list.append(fw_gmx_editconf)
    
### Store

    #files_in = {'data_file': 'packed.pdb' }
    files_in = {
        'coordinate_file': 'default.gro',
        'topology_file':   'default.top',
        'restraint_file':  'default.posre.itp' }
    
    fts_push = [ 
        AddFilesTask( {
            'compress': True ,
            'paths': "default.gro",
            'metadata': {
                'project': project_id,
                'datetime': str(datetime.datetime.now()),
                'type':    'initial_config_gro',
                 **d } 
        } ),
        AddFilesTask( {
            'compress': True ,
            'paths': "default.top",
            'metadata': {
                'project': project_id,
                'datetime': str(datetime.datetime.now()),
                'type':    'initial_config_top',
                 **d } 
        } ),
        AddFilesTask( {
            'compress': True ,
            'paths': "default.posre.itp",
            'metadata': {
                'project': project_id,
                'datetime': str(datetime.datetime.now()),
                'type':    'initial_config_posre_itp',
                 **d } 
        } ) ]
        
               
    
    fw_push = Firework(fts_push,
        name = ', '.join(('push', fw_name_template.format(**d))),
        spec = {
            '_category': hpc_max_specs[machine]['fw_noqueue_category'],
            '_files_in': files_in, 
            'metadata': {
                'project': project_id,
                'datetime': str(datetime.datetime.now()),
                'step':    'push',
                 **d
            }
        },
        parents = [ fw_gmx_editconf ] )
        
    fw_list.append(fw_push)

wf = Workflow(fw_list,
    name = wf_name,
    metadata = {
        'project': project_id,
        'datetime': str(datetime.datetime.now()),
        'type':    'gmx_prep'
    })
In [108]:
wf.as_dict()
Out[108]:
{'fws': [{'spec': {'_category': 'juwels_noqueue',
    '_files_out': [],
    'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
     'datetime': '2020-03-11 20:54:53.900233',
     'step': 'dummy_root'},
    '_tasks': [{'cmd': 'echo',
      'opt': ['"Dummy root"'],
      'store_stdout': False,
      'store_stderr': False,
      'use_shell': True,
      'fizzle_bad_rc': True,
      '_fw_name': 'CmdTask'}]},
   'fw_id': -59,
   'created_on': '2020-03-11T19:54:53.900258',
   'updated_on': '2020-03-11T19:54:53.900259',
   'name': 'GROMACS preparations juwels_devel, juwels-gromacs-prep-2020-03-11'},
  {'spec': {'_category': 'juwels_noqueue',
    '_files_in': {},
    '_files_out': {'data_file': 'in.pdb'},
    'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
     'datetime': '2020-03-11 20:54:53.901271',
     'step': 'fetch',
     'nmolecules': '44'},
    '_tasks': [{'query': {'metadata->project': 'juwels-packmol-2020-03-09',
       'metadata->type': 'initial_config',
       'metadata->nmolecules': '44'},
      'sort_key': 'metadata.datetime',
      'sort_direction': -1,
      'limit': 1,
      'new_file_names': ['in.pdb'],
      '_fw_name': 'GetFilesByQueryTask'}]},
   'fw_id': -60,
   'created_on': '2020-03-11T19:54:53.901293',
   'updated_on': '2020-03-11T19:54:53.901294',
   'name': 'fetch, nmolecules: 44'},
  {'spec': {'_category': 'juwels_noqueue',
    '_files_in': {'data_file': 'in.pdb'},
    '_files_out': {'data_file': 'out.pdb'},
    'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
     'datetime': '2020-03-11 20:54:53.901317',
     'step': 'pdb_chain',
     'nmolecules': '44'},
    '_tasks': [{'cmd': 'pdb_chain',
      'opt': ['< in.pdb > out.pdb'],
      'store_stdout': False,
      'store_stderr': False,
      'use_shell': True,
      'fizzle_bad_rc': True,
      '_fw_name': 'CmdTask'}]},
   'fw_id': -61,
   'created_on': '2020-03-11T19:54:53.901330',
   'updated_on': '2020-03-11T19:54:53.901331',
   'name': 'pdb_chain, nmolecules: 44'},
  {'spec': {'_category': 'juwels_noqueue',
    '_files_in': {'data_file': 'in.pdb'},
    '_files_out': {'data_file': 'out.pdb'},
    'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
     'datetime': '2020-03-11 20:54:53.901346',
     'step': 'pdb_tidy',
     'nmolecules': '44'},
    '_tasks': [{'cmd': 'pdb_tidy',
      'opt': ['< in.pdb > out.pdb'],
      'store_stdout': False,
      'store_stderr': False,
      'use_shell': True,
      'fizzle_bad_rc': True,
      '_fw_name': 'CmdTask'}]},
   'fw_id': -62,
   'created_on': '2020-03-11T19:54:53.901354',
   'updated_on': '2020-03-11T19:54:53.901355',
   'name': 'pdb_tidy, nmolecules: 44'},
  {'spec': {'_category': 'juwels_noqueue',
    '_files_in': {'data_file': 'in.pdb'},
    '_files_out': {'coordinate_file': 'out.gro',
     'topology_file': 'out.top',
     'restraint_file': 'out.posre.itp'},
    'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
     'datetime': '2020-03-11 20:54:53.901370',
     'step': 'gmx_pdb2gro',
     'nmolecules': '44'},
    '_tasks': [{'cmd': 'gmx',
      'opt': ['pdb2gmx',
       '-f',
       'in.pdb',
       '-o',
       'out.gro',
       '-p',
       'out.top',
       '-i',
       'out.posre.itp',
       '-ff',
       'charmm36',
       '-water',
       'tip3p'],
      'stderr_file': 'std.err',
      'stdout_file': 'std.out',
      'store_stdout': True,
      'store_stderr': True,
      'use_shell': True,
      'fizzle_bad_rc': True,
      '_fw_name': 'CmdTask'}]},
   'fw_id': -63,
   'created_on': '2020-03-11T19:54:53.901378',
   'updated_on': '2020-03-11T19:54:53.901378',
   'name': 'gmx_pdb2gro, nmolecules: 44'},
  {'spec': {'_category': 'juwels_noqueue',
    '_files_in': {'coordinate_file': 'in.gro',
     'topology_file': 'in.top',
     'restraint_file': 'in.posre.itp'},
    '_files_out': {'coordinate_file': 'out.gro',
     'topology_file': 'in.top',
     'restraint_file': 'in.posre.itp'},
    'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
     'datetime': '2020-03-11 20:54:53.901391',
     'step': 'gmx_editconf',
     'nmolecules': '44'},
    '_tasks': [{'cmd': 'gmx',
      'opt': ['editconf',
       '-f',
       'in.gro',
       '-o',
       'out.gro',
       '-d',
       2.0,
       '-bt',
       'cubic'],
      'stderr_file': 'std.err',
      'stdout_file': 'std.out',
      'store_stdout': True,
      'store_stderr': True,
      'use_shell': True,
      'fizzle_bad_rc': True,
      '_fw_name': 'CmdTask'}]},
   'fw_id': -64,
   'created_on': '2020-03-11T19:54:53.901398',
   'updated_on': '2020-03-11T19:54:53.901399',
   'name': 'gmx_editconf, nmolecules: 44'},
  {'spec': {'_category': 'juwels_noqueue',
    '_files_in': {'coordinate_file': 'default.gro',
     'topology_file': 'default.top',
     'restraint_file': 'default.posre.itp'},
    'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
     'datetime': '2020-03-11 20:54:53.901452',
     'step': 'push',
     'nmolecules': '44'},
    '_tasks': [{'compress': True,
      'paths': 'default.gro',
      'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
       'datetime': '2020-03-11 20:54:53.901404',
       'type': 'initial_config_gro',
       'nmolecules': '44'},
      '_fw_name': 'AddFilesTask'},
     {'compress': True,
      'paths': 'default.top',
      'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
       'datetime': '2020-03-11 20:54:53.901433',
       'type': 'initial_config_top',
       'nmolecules': '44'},
      '_fw_name': 'AddFilesTask'},
     {'compress': True,
      'paths': 'default.posre.itp',
      'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
       'datetime': '2020-03-11 20:54:53.901442',
       'type': 'initial_config_posre_itp',
       'nmolecules': '44'},
      '_fw_name': 'AddFilesTask'}]},
   'fw_id': -65,
   'created_on': '2020-03-11T19:54:53.901460',
   'updated_on': '2020-03-11T19:54:53.901460',
   'name': 'push, nmolecules: 44'},
  {'spec': {'_category': 'juwels_noqueue',
    '_files_in': {},
    '_files_out': {'data_file': 'in.pdb'},
    'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
     'datetime': '2020-03-11 20:54:53.901476',
     'step': 'fetch',
     'nmolecules': '88'},
    '_tasks': [{'query': {'metadata->project': 'juwels-packmol-2020-03-09',
       'metadata->type': 'initial_config',
       'metadata->nmolecules': '88'},
      'sort_key': 'metadata.datetime',
      'sort_direction': -1,
      'limit': 1,
      'new_file_names': ['in.pdb'],
      '_fw_name': 'GetFilesByQueryTask'}]},
   'fw_id': -66,
   'created_on': '2020-03-11T19:54:53.901483',
   'updated_on': '2020-03-11T19:54:53.901484',
   'name': 'fetch, nmolecules: 88'},
  {'spec': {'_category': 'juwels_noqueue',
    '_files_in': {'data_file': 'in.pdb'},
    '_files_out': {'data_file': 'out.pdb'},
    'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
     'datetime': '2020-03-11 20:54:53.901839',
     'step': 'pdb_chain',
     'nmolecules': '88'},
    '_tasks': [{'cmd': 'pdb_chain',
      'opt': ['< in.pdb > out.pdb'],
      'store_stdout': False,
      'store_stderr': False,
      'use_shell': True,
      'fizzle_bad_rc': True,
      '_fw_name': 'CmdTask'}]},
   'fw_id': -67,
   'created_on': '2020-03-11T19:54:53.901854',
   'updated_on': '2020-03-11T19:54:53.901854',
   'name': 'pdb_chain, nmolecules: 88'},
  {'spec': {'_category': 'juwels_noqueue',
    '_files_in': {'data_file': 'in.pdb'},
    '_files_out': {'data_file': 'out.pdb'},
    'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
     'datetime': '2020-03-11 20:54:53.901869',
     'step': 'pdb_tidy',
     'nmolecules': '88'},
    '_tasks': [{'cmd': 'pdb_tidy',
      'opt': ['< in.pdb > out.pdb'],
      'store_stdout': False,
      'store_stderr': False,
      'use_shell': True,
      'fizzle_bad_rc': True,
      '_fw_name': 'CmdTask'}]},
   'fw_id': -68,
   'created_on': '2020-03-11T19:54:53.901876',
   'updated_on': '2020-03-11T19:54:53.901877',
   'name': 'pdb_tidy, nmolecules: 88'},
  {'spec': {'_category': 'juwels_noqueue',
    '_files_in': {'data_file': 'in.pdb'},
    '_files_out': {'coordinate_file': 'out.gro',
     'topology_file': 'out.top',
     'restraint_file': 'out.posre.itp'},
    'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
     'datetime': '2020-03-11 20:54:53.901890',
     'step': 'gmx_pdb2gro',
     'nmolecules': '88'},
    '_tasks': [{'cmd': 'gmx',
      'opt': ['pdb2gmx',
       '-f',
       'in.pdb',
       '-o',
       'out.gro',
       '-p',
       'out.top',
       '-i',
       'out.posre.itp',
       '-ff',
       'charmm36',
       '-water',
       'tip3p'],
      'stderr_file': 'std.err',
      'stdout_file': 'std.out',
      'store_stdout': True,
      'store_stderr': True,
      'use_shell': True,
      'fizzle_bad_rc': True,
      '_fw_name': 'CmdTask'}]},
   'fw_id': -69,
   'created_on': '2020-03-11T19:54:53.901897',
   'updated_on': '2020-03-11T19:54:53.901898',
   'name': 'gmx_pdb2gro, nmolecules: 88'},
  {'spec': {'_category': 'juwels_noqueue',
    '_files_in': {'coordinate_file': 'in.gro',
     'topology_file': 'in.top',
     'restraint_file': 'in.posre.itp'},
    '_files_out': {'coordinate_file': 'out.gro',
     'topology_file': 'in.top',
     'restraint_file': 'in.posre.itp'},
    'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
     'datetime': '2020-03-11 20:54:53.901909',
     'step': 'gmx_editconf',
     'nmolecules': '88'},
    '_tasks': [{'cmd': 'gmx',
      'opt': ['editconf',
       '-f',
       'in.gro',
       '-o',
       'out.gro',
       '-d',
       2.0,
       '-bt',
       'cubic'],
      'stderr_file': 'std.err',
      'stdout_file': 'std.out',
      'store_stdout': True,
      'store_stderr': True,
      'use_shell': True,
      'fizzle_bad_rc': True,
      '_fw_name': 'CmdTask'}]},
   'fw_id': -70,
   'created_on': '2020-03-11T19:54:53.901916',
   'updated_on': '2020-03-11T19:54:53.901916',
   'name': 'gmx_editconf, nmolecules: 88'},
  {'spec': {'_category': 'juwels_noqueue',
    '_files_in': {'coordinate_file': 'default.gro',
     'topology_file': 'default.top',
     'restraint_file': 'default.posre.itp'},
    'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
     'datetime': '2020-03-11 20:54:53.901944',
     'step': 'push',
     'nmolecules': '88'},
    '_tasks': [{'compress': True,
      'paths': 'default.gro',
      'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
       'datetime': '2020-03-11 20:54:53.901921',
       'type': 'initial_config_gro',
       'nmolecules': '88'},
      '_fw_name': 'AddFilesTask'},
     {'compress': True,
      'paths': 'default.top',
      'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
       'datetime': '2020-03-11 20:54:53.901929',
       'type': 'initial_config_top',
       'nmolecules': '88'},
      '_fw_name': 'AddFilesTask'},
     {'compress': True,
      'paths': 'default.posre.itp',
      'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
       'datetime': '2020-03-11 20:54:53.901935',
       'type': 'initial_config_posre_itp',
       'nmolecules': '88'},
      '_fw_name': 'AddFilesTask'}]},
   'fw_id': -71,
   'created_on': '2020-03-11T19:54:53.901950',
   'updated_on': '2020-03-11T19:54:53.901951',
   'name': 'push, nmolecules: 88'},
  {'spec': {'_category': 'juwels_noqueue',
    '_files_in': {},
    '_files_out': {'data_file': 'in.pdb'},
    'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
     'datetime': '2020-03-11 20:54:53.901964',
     'step': 'fetch',
     'nmolecules': '131'},
    '_tasks': [{'query': {'metadata->project': 'juwels-packmol-2020-03-09',
       'metadata->type': 'initial_config',
       'metadata->nmolecules': '131'},
      'sort_key': 'metadata.datetime',
      'sort_direction': -1,
      'limit': 1,
      'new_file_names': ['in.pdb'],
      '_fw_name': 'GetFilesByQueryTask'}]},
   'fw_id': -72,
   'created_on': '2020-03-11T19:54:53.901970',
   'updated_on': '2020-03-11T19:54:53.901971',
   'name': 'fetch, nmolecules: 131'},
  {'spec': {'_category': 'juwels_noqueue',
    '_files_in': {'data_file': 'in.pdb'},
    '_files_out': {'data_file': 'out.pdb'},
    'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
     'datetime': '2020-03-11 20:54:53.901982',
     'step': 'pdb_chain',
     'nmolecules': '131'},
    '_tasks': [{'cmd': 'pdb_chain',
      'opt': ['< in.pdb > out.pdb'],
      'store_stdout': False,
      'store_stderr': False,
      'use_shell': True,
      'fizzle_bad_rc': True,
      '_fw_name': 'CmdTask'}]},
   'fw_id': -73,
   'created_on': '2020-03-11T19:54:53.901990',
   'updated_on': '2020-03-11T19:54:53.901990',
   'name': 'pdb_chain, nmolecules: 131'},
  {'spec': {'_category': 'juwels_noqueue',
    '_files_in': {'data_file': 'in.pdb'},
    '_files_out': {'data_file': 'out.pdb'},
    'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
     'datetime': '2020-03-11 20:54:53.902001',
     'step': 'pdb_tidy',
     'nmolecules': '131'},
    '_tasks': [{'cmd': 'pdb_tidy',
      'opt': ['< in.pdb > out.pdb'],
      'store_stdout': False,
      'store_stderr': False,
      'use_shell': True,
      'fizzle_bad_rc': True,
      '_fw_name': 'CmdTask'}]},
   'fw_id': -74,
   'created_on': '2020-03-11T19:54:53.902009',
   'updated_on': '2020-03-11T19:54:53.902009',
   'name': 'pdb_tidy, nmolecules: 131'},
  {'spec': {'_category': 'juwels_noqueue',
    '_files_in': {'data_file': 'in.pdb'},
    '_files_out': {'coordinate_file': 'out.gro',
     'topology_file': 'out.top',
     'restraint_file': 'out.posre.itp'},
    'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
     'datetime': '2020-03-11 20:54:53.902020',
     'step': 'gmx_pdb2gro',
     'nmolecules': '131'},
    '_tasks': [{'cmd': 'gmx',
      'opt': ['pdb2gmx',
       '-f',
       'in.pdb',
       '-o',
       'out.gro',
       '-p',
       'out.top',
       '-i',
       'out.posre.itp',
       '-ff',
       'charmm36',
       '-water',
       'tip3p'],
      'stderr_file': 'std.err',
      'stdout_file': 'std.out',
      'store_stdout': True,
      'store_stderr': True,
      'use_shell': True,
      'fizzle_bad_rc': True,
      '_fw_name': 'CmdTask'}]},
   'fw_id': -75,
   'created_on': '2020-03-11T19:54:53.902042',
   'updated_on': '2020-03-11T19:54:53.902043',
   'name': 'gmx_pdb2gro, nmolecules: 131'},
  {'spec': {'_category': 'juwels_noqueue',
    '_files_in': {'coordinate_file': 'in.gro',
     'topology_file': 'in.top',
     'restraint_file': 'in.posre.itp'},
    '_files_out': {'coordinate_file': 'out.gro',
     'topology_file': 'in.top',
     'restraint_file': 'in.posre.itp'},
    'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
     'datetime': '2020-03-11 20:54:53.902059',
     'step': 'gmx_editconf',
     'nmolecules': '131'},
    '_tasks': [{'cmd': 'gmx',
      'opt': ['editconf',
       '-f',
       'in.gro',
       '-o',
       'out.gro',
       '-d',
       2.0,
       '-bt',
       'cubic'],
      'stderr_file': 'std.err',
      'stdout_file': 'std.out',
      'store_stdout': True,
      'store_stderr': True,
      'use_shell': True,
      'fizzle_bad_rc': True,
      '_fw_name': 'CmdTask'}]},
   'fw_id': -76,
   'created_on': '2020-03-11T19:54:53.902077',
   'updated_on': '2020-03-11T19:54:53.902078',
   'name': 'gmx_editconf, nmolecules: 131'},
  {'spec': {'_category': 'juwels_noqueue',
    '_files_in': {'coordinate_file': 'default.gro',
     'topology_file': 'default.top',
     'restraint_file': 'default.posre.itp'},
    'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
     'datetime': '2020-03-11 20:54:53.902129',
     'step': 'push',
     'nmolecules': '131'},
    '_tasks': [{'compress': True,
      'paths': 'default.gro',
      'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
       'datetime': '2020-03-11 20:54:53.902083',
       'type': 'initial_config_gro',
       'nmolecules': '131'},
      '_fw_name': 'AddFilesTask'},
     {'compress': True,
      'paths': 'default.top',
      'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
       'datetime': '2020-03-11 20:54:53.902103',
       'type': 'initial_config_top',
       'nmolecules': '131'},
      '_fw_name': 'AddFilesTask'},
     {'compress': True,
      'paths': 'default.posre.itp',
      'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
       'datetime': '2020-03-11 20:54:53.902111',
       'type': 'initial_config_posre_itp',
       'nmolecules': '131'},
      '_fw_name': 'AddFilesTask'}]},
   'fw_id': -77,
   'created_on': '2020-03-11T19:54:53.902138',
   'updated_on': '2020-03-11T19:54:53.902139',
   'name': 'push, nmolecules: 131'},
  {'spec': {'_category': 'juwels_noqueue',
    '_files_in': {},
    '_files_out': {'data_file': 'in.pdb'},
    'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
     'datetime': '2020-03-11 20:54:53.902154',
     'step': 'fetch',
     'nmolecules': '175'},
    '_tasks': [{'query': {'metadata->project': 'juwels-packmol-2020-03-09',
       'metadata->type': 'initial_config',
       'metadata->nmolecules': '175'},
      'sort_key': 'metadata.datetime',
      'sort_direction': -1,
      'limit': 1,
      'new_file_names': ['in.pdb'],
      '_fw_name': 'GetFilesByQueryTask'}]},
   'fw_id': -78,
   'created_on': '2020-03-11T19:54:53.902161',
   'updated_on': '2020-03-11T19:54:53.902162',
   'name': 'fetch, nmolecules: 175'},
  {'spec': {'_category': 'juwels_noqueue',
    '_files_in': {'data_file': 'in.pdb'},
    '_files_out': {'data_file': 'out.pdb'},
    'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
     'datetime': '2020-03-11 20:54:53.902174',
     'step': 'pdb_chain',
     'nmolecules': '175'},
    '_tasks': [{'cmd': 'pdb_chain',
      'opt': ['< in.pdb > out.pdb'],
      'store_stdout': False,
      'store_stderr': False,
      'use_shell': True,
      'fizzle_bad_rc': True,
      '_fw_name': 'CmdTask'}]},
   'fw_id': -79,
   'created_on': '2020-03-11T19:54:53.902181',
   'updated_on': '2020-03-11T19:54:53.902182',
   'name': 'pdb_chain, nmolecules: 175'},
  {'spec': {'_category': 'juwels_noqueue',
    '_files_in': {'data_file': 'in.pdb'},
    '_files_out': {'data_file': 'out.pdb'},
    'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
     'datetime': '2020-03-11 20:54:53.902193',
     'step': 'pdb_tidy',
     'nmolecules': '175'},
    '_tasks': [{'cmd': 'pdb_tidy',
      'opt': ['< in.pdb > out.pdb'],
      'store_stdout': False,
      'store_stderr': False,
      'use_shell': True,
      'fizzle_bad_rc': True,
      '_fw_name': 'CmdTask'}]},
   'fw_id': -80,
   'created_on': '2020-03-11T19:54:53.902200',
   'updated_on': '2020-03-11T19:54:53.902201',
   'name': 'pdb_tidy, nmolecules: 175'},
  {'spec': {'_category': 'juwels_noqueue',
    '_files_in': {'data_file': 'in.pdb'},
    '_files_out': {'coordinate_file': 'out.gro',
     'topology_file': 'out.top',
     'restraint_file': 'out.posre.itp'},
    'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
     'datetime': '2020-03-11 20:54:53.902212',
     'step': 'gmx_pdb2gro',
     'nmolecules': '175'},
    '_tasks': [{'cmd': 'gmx',
      'opt': ['pdb2gmx',
       '-f',
       'in.pdb',
       '-o',
       'out.gro',
       '-p',
       'out.top',
       '-i',
       'out.posre.itp',
       '-ff',
       'charmm36',
       '-water',
       'tip3p'],
      'stderr_file': 'std.err',
      'stdout_file': 'std.out',
      'store_stdout': True,
      'store_stderr': True,
      'use_shell': True,
      'fizzle_bad_rc': True,
      '_fw_name': 'CmdTask'}]},
   'fw_id': -81,
   'created_on': '2020-03-11T19:54:53.902219',
   'updated_on': '2020-03-11T19:54:53.902219',
   'name': 'gmx_pdb2gro, nmolecules: 175'},
  {'spec': {'_category': 'juwels_noqueue',
    '_files_in': {'coordinate_file': 'in.gro',
     'topology_file': 'in.top',
     'restraint_file': 'in.posre.itp'},
    '_files_out': {'coordinate_file': 'out.gro',
     'topology_file': 'in.top',
     'restraint_file': 'in.posre.itp'},
    'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
     'datetime': '2020-03-11 20:54:53.902231',
     'step': 'gmx_editconf',
     'nmolecules': '175'},
    '_tasks': [{'cmd': 'gmx',
      'opt': ['editconf',
       '-f',
       'in.gro',
       '-o',
       'out.gro',
       '-d',
       2.0,
       '-bt',
       'cubic'],
      'stderr_file': 'std.err',
      'stdout_file': 'std.out',
      'store_stdout': True,
      'store_stderr': True,
      'use_shell': True,
      'fizzle_bad_rc': True,
      '_fw_name': 'CmdTask'}]},
   'fw_id': -82,
   'created_on': '2020-03-11T19:54:53.902237',
   'updated_on': '2020-03-11T19:54:53.902238',
   'name': 'gmx_editconf, nmolecules: 175'},
  {'spec': {'_category': 'juwels_noqueue',
    '_files_in': {'coordinate_file': 'default.gro',
     'topology_file': 'default.top',
     'restraint_file': 'default.posre.itp'},
    'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
     'datetime': '2020-03-11 20:54:53.902264',
     'step': 'push',
     'nmolecules': '175'},
    '_tasks': [{'compress': True,
      'paths': 'default.gro',
      'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
       'datetime': '2020-03-11 20:54:53.902242',
       'type': 'initial_config_gro',
       'nmolecules': '175'},
      '_fw_name': 'AddFilesTask'},
     {'compress': True,
      'paths': 'default.top',
      'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
       'datetime': '2020-03-11 20:54:53.902249',
       'type': 'initial_config_top',
       'nmolecules': '175'},
      '_fw_name': 'AddFilesTask'},
     {'compress': True,
      'paths': 'default.posre.itp',
      'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
       'datetime': '2020-03-11 20:54:53.902256',
       'type': 'initial_config_posre_itp',
       'nmolecules': '175'},
      '_fw_name': 'AddFilesTask'}]},
   'fw_id': -83,
   'created_on': '2020-03-11T19:54:53.902283',
   'updated_on': '2020-03-11T19:54:53.902283',
   'name': 'push, nmolecules: 175'},
  {'spec': {'_category': 'juwels_noqueue',
    '_files_in': {},
    '_files_out': {'data_file': 'in.pdb'},
    'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
     'datetime': '2020-03-11 20:54:53.902294',
     'step': 'fetch',
     'nmolecules': '219'},
    '_tasks': [{'query': {'metadata->project': 'juwels-packmol-2020-03-09',
       'metadata->type': 'initial_config',
       'metadata->nmolecules': '219'},
      'sort_key': 'metadata.datetime',
      'sort_direction': -1,
      'limit': 1,
      'new_file_names': ['in.pdb'],
      '_fw_name': 'GetFilesByQueryTask'}]},
   'fw_id': -84,
   'created_on': '2020-03-11T19:54:53.902301',
   'updated_on': '2020-03-11T19:54:53.902301',
   'name': 'fetch, nmolecules: 219'},
  {'spec': {'_category': 'juwels_noqueue',
    '_files_in': {'data_file': 'in.pdb'},
    '_files_out': {'data_file': 'out.pdb'},
    'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
     'datetime': '2020-03-11 20:54:53.902311',
     'step': 'pdb_chain',
     'nmolecules': '219'},
    '_tasks': [{'cmd': 'pdb_chain',
      'opt': ['< in.pdb > out.pdb'],
      'store_stdout': False,
      'store_stderr': False,
      'use_shell': True,
      'fizzle_bad_rc': True,
      '_fw_name': 'CmdTask'}]},
   'fw_id': -85,
   'created_on': '2020-03-11T19:54:53.902318',
   'updated_on': '2020-03-11T19:54:53.902319',
   'name': 'pdb_chain, nmolecules: 219'},
  {'spec': {'_category': 'juwels_noqueue',
    '_files_in': {'data_file': 'in.pdb'},
    '_files_out': {'data_file': 'out.pdb'},
    'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
     'datetime': '2020-03-11 20:54:53.902342',
     'step': 'pdb_tidy',
     'nmolecules': '219'},
    '_tasks': [{'cmd': 'pdb_tidy',
      'opt': ['< in.pdb > out.pdb'],
      'store_stdout': False,
      'store_stderr': False,
      'use_shell': True,
      'fizzle_bad_rc': True,
      '_fw_name': 'CmdTask'}]},
   'fw_id': -86,
   'created_on': '2020-03-11T19:54:53.902350',
   'updated_on': '2020-03-11T19:54:53.902351',
   'name': 'pdb_tidy, nmolecules: 219'},
  {'spec': {'_category': 'juwels_noqueue',
    '_files_in': {'data_file': 'in.pdb'},
    '_files_out': {'coordinate_file': 'out.gro',
     'topology_file': 'out.top',
     'restraint_file': 'out.posre.itp'},
    'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
     'datetime': '2020-03-11 20:54:53.902362',
     'step': 'gmx_pdb2gro',
     'nmolecules': '219'},
    '_tasks': [{'cmd': 'gmx',
      'opt': ['pdb2gmx',
       '-f',
       'in.pdb',
       '-o',
       'out.gro',
       '-p',
       'out.top',
       '-i',
       'out.posre.itp',
       '-ff',
       'charmm36',
       '-water',
       'tip3p'],
      'stderr_file': 'std.err',
      'stdout_file': 'std.out',
      'store_stdout': True,
      'store_stderr': True,
      'use_shell': True,
      'fizzle_bad_rc': True,
      '_fw_name': 'CmdTask'}]},
   'fw_id': -87,
   'created_on': '2020-03-11T19:54:53.902369',
   'updated_on': '2020-03-11T19:54:53.902369',
   'name': 'gmx_pdb2gro, nmolecules: 219'},
  {'spec': {'_category': 'juwels_noqueue',
    '_files_in': {'coordinate_file': 'in.gro',
     'topology_file': 'in.top',
     'restraint_file': 'in.posre.itp'},
    '_files_out': {'coordinate_file': 'out.gro',
     'topology_file': 'in.top',
     'restraint_file': 'in.posre.itp'},
    'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
     'datetime': '2020-03-11 20:54:53.902379',
     'step': 'gmx_editconf',
     'nmolecules': '219'},
    '_tasks': [{'cmd': 'gmx',
      'opt': ['editconf',
       '-f',
       'in.gro',
       '-o',
       'out.gro',
       '-d',
       2.0,
       '-bt',
       'cubic'],
      'stderr_file': 'std.err',
      'stdout_file': 'std.out',
      'store_stdout': True,
      'store_stderr': True,
      'use_shell': True,
      'fizzle_bad_rc': True,
      '_fw_name': 'CmdTask'}]},
   'fw_id': -88,
   'created_on': '2020-03-11T19:54:53.902386',
   'updated_on': '2020-03-11T19:54:53.902386',
   'name': 'gmx_editconf, nmolecules: 219'},
  {'spec': {'_category': 'juwels_noqueue',
    '_files_in': {'coordinate_file': 'default.gro',
     'topology_file': 'default.top',
     'restraint_file': 'default.posre.itp'},
    'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
     'datetime': '2020-03-11 20:54:53.902411',
     'step': 'push',
     'nmolecules': '219'},
    '_tasks': [{'compress': True,
      'paths': 'default.gro',
      'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
       'datetime': '2020-03-11 20:54:53.902390',
       'type': 'initial_config_gro',
       'nmolecules': '219'},
      '_fw_name': 'AddFilesTask'},
     {'compress': True,
      'paths': 'default.top',
      'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
       'datetime': '2020-03-11 20:54:53.902397',
       'type': 'initial_config_top',
       'nmolecules': '219'},
      '_fw_name': 'AddFilesTask'},
     {'compress': True,
      'paths': 'default.posre.itp',
      'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
       'datetime': '2020-03-11 20:54:53.902403',
       'type': 'initial_config_posre_itp',
       'nmolecules': '219'},
      '_fw_name': 'AddFilesTask'}]},
   'fw_id': -89,
   'created_on': '2020-03-11T19:54:53.902417',
   'updated_on': '2020-03-11T19:54:53.902418',
   'name': 'push, nmolecules: 219'},
  {'spec': {'_category': 'juwels_noqueue',
    '_files_in': {},
    '_files_out': {'data_file': 'in.pdb'},
    'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
     'datetime': '2020-03-11 20:54:53.902430',
     'step': 'fetch',
     'nmolecules': '263'},
    '_tasks': [{'query': {'metadata->project': 'juwels-packmol-2020-03-09',
       'metadata->type': 'initial_config',
       'metadata->nmolecules': '263'},
      'sort_key': 'metadata.datetime',
      'sort_direction': -1,
      'limit': 1,
      'new_file_names': ['in.pdb'],
      '_fw_name': 'GetFilesByQueryTask'}]},
   'fw_id': -90,
   'created_on': '2020-03-11T19:54:53.902436',
   'updated_on': '2020-03-11T19:54:53.902437',
   'name': 'fetch, nmolecules: 263'},
  {'spec': {'_category': 'juwels_noqueue',
    '_files_in': {'data_file': 'in.pdb'},
    '_files_out': {'data_file': 'out.pdb'},
    'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
     'datetime': '2020-03-11 20:54:53.902447',
     'step': 'pdb_chain',
     'nmolecules': '263'},
    '_tasks': [{'cmd': 'pdb_chain',
      'opt': ['< in.pdb > out.pdb'],
      'store_stdout': False,
      'store_stderr': False,
      'use_shell': True,
      'fizzle_bad_rc': True,
      '_fw_name': 'CmdTask'}]},
   'fw_id': -91,
   'created_on': '2020-03-11T19:54:53.902454',
   'updated_on': '2020-03-11T19:54:53.902454',
   'name': 'pdb_chain, nmolecules: 263'},
  {'spec': {'_category': 'juwels_noqueue',
    '_files_in': {'data_file': 'in.pdb'},
    '_files_out': {'data_file': 'out.pdb'},
    'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
     'datetime': '2020-03-11 20:54:53.902464',
     'step': 'pdb_tidy',
     'nmolecules': '263'},
    '_tasks': [{'cmd': 'pdb_tidy',
      'opt': ['< in.pdb > out.pdb'],
      'store_stdout': False,
      'store_stderr': False,
      'use_shell': True,
      'fizzle_bad_rc': True,
      '_fw_name': 'CmdTask'}]},
   'fw_id': -92,
   'created_on': '2020-03-11T19:54:53.902470',
   'updated_on': '2020-03-11T19:54:53.902470',
   'name': 'pdb_tidy, nmolecules: 263'},
  {'spec': {'_category': 'juwels_noqueue',
    '_files_in': {'data_file': 'in.pdb'},
    '_files_out': {'coordinate_file': 'out.gro',
     'topology_file': 'out.top',
     'restraint_file': 'out.posre.itp'},
    'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
     'datetime': '2020-03-11 20:54:53.902481',
     'step': 'gmx_pdb2gro',
     'nmolecules': '263'},
    '_tasks': [{'cmd': 'gmx',
      'opt': ['pdb2gmx',
       '-f',
       'in.pdb',
       '-o',
       'out.gro',
       '-p',
       'out.top',
       '-i',
       'out.posre.itp',
       '-ff',
       'charmm36',
       '-water',
       'tip3p'],
      'stderr_file': 'std.err',
      'stdout_file': 'std.out',
      'store_stdout': True,
      'store_stderr': True,
      'use_shell': True,
      'fizzle_bad_rc': True,
      '_fw_name': 'CmdTask'}]},
   'fw_id': -93,
   'created_on': '2020-03-11T19:54:53.902487',
   'updated_on': '2020-03-11T19:54:53.902487',
   'name': 'gmx_pdb2gro, nmolecules: 263'},
  {'spec': {'_category': 'juwels_noqueue',
    '_files_in': {'coordinate_file': 'in.gro',
     'topology_file': 'in.top',
     'restraint_file': 'in.posre.itp'},
    '_files_out': {'coordinate_file': 'out.gro',
     'topology_file': 'in.top',
     'restraint_file': 'in.posre.itp'},
    'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
     'datetime': '2020-03-11 20:54:53.902498',
     'step': 'gmx_editconf',
     'nmolecules': '263'},
    '_tasks': [{'cmd': 'gmx',
      'opt': ['editconf',
       '-f',
       'in.gro',
       '-o',
       'out.gro',
       '-d',
       2.0,
       '-bt',
       'cubic'],
      'stderr_file': 'std.err',
      'stdout_file': 'std.out',
      'store_stdout': True,
      'store_stderr': True,
      'use_shell': True,
      'fizzle_bad_rc': True,
      '_fw_name': 'CmdTask'}]},
   'fw_id': -94,
   'created_on': '2020-03-11T19:54:53.902504',
   'updated_on': '2020-03-11T19:54:53.902505',
   'name': 'gmx_editconf, nmolecules: 263'},
  {'spec': {'_category': 'juwels_noqueue',
    '_files_in': {'coordinate_file': 'default.gro',
     'topology_file': 'default.top',
     'restraint_file': 'default.posre.itp'},
    'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
     'datetime': '2020-03-11 20:54:53.902530',
     'step': 'push',
     'nmolecules': '263'},
    '_tasks': [{'compress': True,
      'paths': 'default.gro',
      'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
       'datetime': '2020-03-11 20:54:53.902510',
       'type': 'initial_config_gro',
       'nmolecules': '263'},
      '_fw_name': 'AddFilesTask'},
     {'compress': True,
      'paths': 'default.top',
      'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
       'datetime': '2020-03-11 20:54:53.902516',
       'type': 'initial_config_top',
       'nmolecules': '263'},
      '_fw_name': 'AddFilesTask'},
     {'compress': True,
      'paths': 'default.posre.itp',
      'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
       'datetime': '2020-03-11 20:54:53.902522',
       'type': 'initial_config_posre_itp',
       'nmolecules': '263'},
      '_fw_name': 'AddFilesTask'}]},
   'fw_id': -95,
   'created_on': '2020-03-11T19:54:53.902536',
   'updated_on': '2020-03-11T19:54:53.902536',
   'name': 'push, nmolecules: 263'},
  {'spec': {'_category': 'juwels_noqueue',
    '_files_in': {},
    '_files_out': {'data_file': 'in.pdb'},
    'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
     'datetime': '2020-03-11 20:54:53.902547',
     'step': 'fetch',
     'nmolecules': '306'},
    '_tasks': [{'query': {'metadata->project': 'juwels-packmol-2020-03-09',
       'metadata->type': 'initial_config',
       'metadata->nmolecules': '306'},
      'sort_key': 'metadata.datetime',
      'sort_direction': -1,
      'limit': 1,
      'new_file_names': ['in.pdb'],
      '_fw_name': 'GetFilesByQueryTask'}]},
   'fw_id': -96,
   'created_on': '2020-03-11T19:54:53.902553',
   'updated_on': '2020-03-11T19:54:53.902554',
   'name': 'fetch, nmolecules: 306'},
  {'spec': {'_category': 'juwels_noqueue',
    '_files_in': {'data_file': 'in.pdb'},
    '_files_out': {'data_file': 'out.pdb'},
    'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
     'datetime': '2020-03-11 20:54:53.902564',
     'step': 'pdb_chain',
     'nmolecules': '306'},
    '_tasks': [{'cmd': 'pdb_chain',
      'opt': ['< in.pdb > out.pdb'],
      'store_stdout': False,
      'store_stderr': False,
      'use_shell': True,
      'fizzle_bad_rc': True,
      '_fw_name': 'CmdTask'}]},
   'fw_id': -97,
   'created_on': '2020-03-11T19:54:53.902570',
   'updated_on': '2020-03-11T19:54:53.902571',
   'name': 'pdb_chain, nmolecules: 306'},
  {'spec': {'_category': 'juwels_noqueue',
    '_files_in': {'data_file': 'in.pdb'},
    '_files_out': {'data_file': 'out.pdb'},
    'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
     'datetime': '2020-03-11 20:54:53.902580',
     'step': 'pdb_tidy',
     'nmolecules': '306'},
    '_tasks': [{'cmd': 'pdb_tidy',
      'opt': ['< in.pdb > out.pdb'],
      'store_stdout': False,
      'store_stderr': False,
      'use_shell': True,
      'fizzle_bad_rc': True,
      '_fw_name': 'CmdTask'}]},
   'fw_id': -98,
   'created_on': '2020-03-11T19:54:53.902587',
   'updated_on': '2020-03-11T19:54:53.902588',
   'name': 'pdb_tidy, nmolecules: 306'},
  {'spec': {'_category': 'juwels_noqueue',
    '_files_in': {'data_file': 'in.pdb'},
    '_files_out': {'coordinate_file': 'out.gro',
     'topology_file': 'out.top',
     'restraint_file': 'out.posre.itp'},
    'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
     'datetime': '2020-03-11 20:54:53.902598',
     'step': 'gmx_pdb2gro',
     'nmolecules': '306'},
    '_tasks': [{'cmd': 'gmx',
      'opt': ['pdb2gmx',
       '-f',
       'in.pdb',
       '-o',
       'out.gro',
       '-p',
       'out.top',
       '-i',
       'out.posre.itp',
       '-ff',
       'charmm36',
       '-water',
       'tip3p'],
      'stderr_file': 'std.err',
      'stdout_file': 'std.out',
      'store_stdout': True,
      'store_stderr': True,
      'use_shell': True,
      'fizzle_bad_rc': True,
      '_fw_name': 'CmdTask'}]},
   'fw_id': -99,
   'created_on': '2020-03-11T19:54:53.902604',
   'updated_on': '2020-03-11T19:54:53.902604',
   'name': 'gmx_pdb2gro, nmolecules: 306'},
  {'spec': {'_category': 'juwels_noqueue',
    '_files_in': {'coordinate_file': 'in.gro',
     'topology_file': 'in.top',
     'restraint_file': 'in.posre.itp'},
    '_files_out': {'coordinate_file': 'out.gro',
     'topology_file': 'in.top',
     'restraint_file': 'in.posre.itp'},
    'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
     'datetime': '2020-03-11 20:54:53.902615',
     'step': 'gmx_editconf',
     'nmolecules': '306'},
    '_tasks': [{'cmd': 'gmx',
      'opt': ['editconf',
       '-f',
       'in.gro',
       '-o',
       'out.gro',
       '-d',
       2.0,
       '-bt',
       'cubic'],
      'stderr_file': 'std.err',
      'stdout_file': 'std.out',
      'store_stdout': True,
      'store_stderr': True,
      'use_shell': True,
      'fizzle_bad_rc': True,
      '_fw_name': 'CmdTask'}]},
   'fw_id': -100,
   'created_on': '2020-03-11T19:54:53.902621',
   'updated_on': '2020-03-11T19:54:53.902622',
   'name': 'gmx_editconf, nmolecules: 306'},
  {'spec': {'_category': 'juwels_noqueue',
    '_files_in': {'coordinate_file': 'default.gro',
     'topology_file': 'default.top',
     'restraint_file': 'default.posre.itp'},
    'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
     'datetime': '2020-03-11 20:54:53.902650',
     'step': 'push',
     'nmolecules': '306'},
    '_tasks': [{'compress': True,
      'paths': 'default.gro',
      'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
       'datetime': '2020-03-11 20:54:53.902625',
       'type': 'initial_config_gro',
       'nmolecules': '306'},
      '_fw_name': 'AddFilesTask'},
     {'compress': True,
      'paths': 'default.top',
      'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
       'datetime': '2020-03-11 20:54:53.902636',
       'type': 'initial_config_top',
       'nmolecules': '306'},
      '_fw_name': 'AddFilesTask'},
     {'compress': True,
      'paths': 'default.posre.itp',
      'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
       'datetime': '2020-03-11 20:54:53.902642',
       'type': 'initial_config_posre_itp',
       'nmolecules': '306'},
      '_fw_name': 'AddFilesTask'}]},
   'fw_id': -101,
   'created_on': '2020-03-11T19:54:53.902656',
   'updated_on': '2020-03-11T19:54:53.902656',
   'name': 'push, nmolecules: 306'},
  {'spec': {'_category': 'juwels_noqueue',
    '_files_in': {},
    '_files_out': {'data_file': 'in.pdb'},
    'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
     'datetime': '2020-03-11 20:54:53.902667',
     'step': 'fetch',
     'nmolecules': '350'},
    '_tasks': [{'query': {'metadata->project': 'juwels-packmol-2020-03-09',
       'metadata->type': 'initial_config',
       'metadata->nmolecules': '350'},
      'sort_key': 'metadata.datetime',
      'sort_direction': -1,
      'limit': 1,
      'new_file_names': ['in.pdb'],
      '_fw_name': 'GetFilesByQueryTask'}]},
   'fw_id': -102,
   'created_on': '2020-03-11T19:54:53.902673',
   'updated_on': '2020-03-11T19:54:53.902674',
   'name': 'fetch, nmolecules: 350'},
  {'spec': {'_category': 'juwels_noqueue',
    '_files_in': {'data_file': 'in.pdb'},
    '_files_out': {'data_file': 'out.pdb'},
    'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
     'datetime': '2020-03-11 20:54:53.902684',
     'step': 'pdb_chain',
     'nmolecules': '350'},
    '_tasks': [{'cmd': 'pdb_chain',
      'opt': ['< in.pdb > out.pdb'],
      'store_stdout': False,
      'store_stderr': False,
      'use_shell': True,
      'fizzle_bad_rc': True,
      '_fw_name': 'CmdTask'}]},
   'fw_id': -103,
   'created_on': '2020-03-11T19:54:53.902691',
   'updated_on': '2020-03-11T19:54:53.902691',
   'name': 'pdb_chain, nmolecules: 350'},
  {'spec': {'_category': 'juwels_noqueue',
    '_files_in': {'data_file': 'in.pdb'},
    '_files_out': {'data_file': 'out.pdb'},
    'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
     'datetime': '2020-03-11 20:54:53.902700',
     'step': 'pdb_tidy',
     'nmolecules': '350'},
    '_tasks': [{'cmd': 'pdb_tidy',
      'opt': ['< in.pdb > out.pdb'],
      'store_stdout': False,
      'store_stderr': False,
      'use_shell': True,
      'fizzle_bad_rc': True,
      '_fw_name': 'CmdTask'}]},
   'fw_id': -104,
   'created_on': '2020-03-11T19:54:53.902707',
   'updated_on': '2020-03-11T19:54:53.902707',
   'name': 'pdb_tidy, nmolecules: 350'},
  {'spec': {'_category': 'juwels_noqueue',
    '_files_in': {'data_file': 'in.pdb'},
    '_files_out': {'coordinate_file': 'out.gro',
     'topology_file': 'out.top',
     'restraint_file': 'out.posre.itp'},
    'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
     'datetime': '2020-03-11 20:54:53.902717',
     'step': 'gmx_pdb2gro',
     'nmolecules': '350'},
    '_tasks': [{'cmd': 'gmx',
      'opt': ['pdb2gmx',
       '-f',
       'in.pdb',
       '-o',
       'out.gro',
       '-p',
       'out.top',
       '-i',
       'out.posre.itp',
       '-ff',
       'charmm36',
       '-water',
       'tip3p'],
      'stderr_file': 'std.err',
      'stdout_file': 'std.out',
      'store_stdout': True,
      'store_stderr': True,
      'use_shell': True,
      'fizzle_bad_rc': True,
      '_fw_name': 'CmdTask'}]},
   'fw_id': -105,
   'created_on': '2020-03-11T19:54:53.902723',
   'updated_on': '2020-03-11T19:54:53.902724',
   'name': 'gmx_pdb2gro, nmolecules: 350'},
  {'spec': {'_category': 'juwels_noqueue',
    '_files_in': {'coordinate_file': 'in.gro',
     'topology_file': 'in.top',
     'restraint_file': 'in.posre.itp'},
    '_files_out': {'coordinate_file': 'out.gro',
     'topology_file': 'in.top',
     'restraint_file': 'in.posre.itp'},
    'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
     'datetime': '2020-03-11 20:54:53.902734',
     'step': 'gmx_editconf',
     'nmolecules': '350'},
    '_tasks': [{'cmd': 'gmx',
      'opt': ['editconf',
       '-f',
       'in.gro',
       '-o',
       'out.gro',
       '-d',
       2.0,
       '-bt',
       'cubic'],
      'stderr_file': 'std.err',
      'stdout_file': 'std.out',
      'store_stdout': True,
      'store_stderr': True,
      'use_shell': True,
      'fizzle_bad_rc': True,
      '_fw_name': 'CmdTask'}]},
   'fw_id': -106,
   'created_on': '2020-03-11T19:54:53.902740',
   'updated_on': '2020-03-11T19:54:53.902741',
   'name': 'gmx_editconf, nmolecules: 350'},
  {'spec': {'_category': 'juwels_noqueue',
    '_files_in': {'coordinate_file': 'default.gro',
     'topology_file': 'default.top',
     'restraint_file': 'default.posre.itp'},
    'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
     'datetime': '2020-03-11 20:54:53.902787',
     'step': 'push',
     'nmolecules': '350'},
    '_tasks': [{'compress': True,
      'paths': 'default.gro',
      'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
       'datetime': '2020-03-11 20:54:53.902745',
       'type': 'initial_config_gro',
       'nmolecules': '350'},
      '_fw_name': 'AddFilesTask'},
     {'compress': True,
      'paths': 'default.top',
      'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
       'datetime': '2020-03-11 20:54:53.902772',
       'type': 'initial_config_top',
       'nmolecules': '350'},
      '_fw_name': 'AddFilesTask'},
     {'compress': True,
      'paths': 'default.posre.itp',
      'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
       'datetime': '2020-03-11 20:54:53.902778',
       'type': 'initial_config_posre_itp',
       'nmolecules': '350'},
      '_fw_name': 'AddFilesTask'}]},
   'fw_id': -107,
   'created_on': '2020-03-11T19:54:53.902794',
   'updated_on': '2020-03-11T19:54:53.902794',
   'name': 'push, nmolecules: 350'},
  {'spec': {'_category': 'juwels_noqueue',
    '_files_in': {},
    '_files_out': {'data_file': 'in.pdb'},
    'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
     'datetime': '2020-03-11 20:54:53.902806',
     'step': 'fetch',
     'nmolecules': '394'},
    '_tasks': [{'query': {'metadata->project': 'juwels-packmol-2020-03-09',
       'metadata->type': 'initial_config',
       'metadata->nmolecules': '394'},
      'sort_key': 'metadata.datetime',
      'sort_direction': -1,
      'limit': 1,
      'new_file_names': ['in.pdb'],
      '_fw_name': 'GetFilesByQueryTask'}]},
   'fw_id': -108,
   'created_on': '2020-03-11T19:54:53.902813',
   'updated_on': '2020-03-11T19:54:53.902813',
   'name': 'fetch, nmolecules: 394'},
  {'spec': {'_category': 'juwels_noqueue',
    '_files_in': {'data_file': 'in.pdb'},
    '_files_out': {'data_file': 'out.pdb'},
    'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
     'datetime': '2020-03-11 20:54:53.902830',
     'step': 'pdb_chain',
     'nmolecules': '394'},
    '_tasks': [{'cmd': 'pdb_chain',
      'opt': ['< in.pdb > out.pdb'],
      'store_stdout': False,
      'store_stderr': False,
      'use_shell': True,
      'fizzle_bad_rc': True,
      '_fw_name': 'CmdTask'}]},
   'fw_id': -109,
   'created_on': '2020-03-11T19:54:53.902837',
   'updated_on': '2020-03-11T19:54:53.902838',
   'name': 'pdb_chain, nmolecules: 394'},
  {'spec': {'_category': 'juwels_noqueue',
    '_files_in': {'data_file': 'in.pdb'},
    '_files_out': {'data_file': 'out.pdb'},
    'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
     'datetime': '2020-03-11 20:54:53.902847',
     'step': 'pdb_tidy',
     'nmolecules': '394'},
    '_tasks': [{'cmd': 'pdb_tidy',
      'opt': ['< in.pdb > out.pdb'],
      'store_stdout': False,
      'store_stderr': False,
      'use_shell': True,
      'fizzle_bad_rc': True,
      '_fw_name': 'CmdTask'}]},
   'fw_id': -110,
   'created_on': '2020-03-11T19:54:53.902854',
   'updated_on': '2020-03-11T19:54:53.902854',
   'name': 'pdb_tidy, nmolecules: 394'},
  {'spec': {'_category': 'juwels_noqueue',
    '_files_in': {'data_file': 'in.pdb'},
    '_files_out': {'coordinate_file': 'out.gro',
     'topology_file': 'out.top',
     'restraint_file': 'out.posre.itp'},
    'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
     'datetime': '2020-03-11 20:54:53.902865',
     'step': 'gmx_pdb2gro',
     'nmolecules': '394'},
    '_tasks': [{'cmd': 'gmx',
      'opt': ['pdb2gmx',
       '-f',
       'in.pdb',
       '-o',
       'out.gro',
       '-p',
       'out.top',
       '-i',
       'out.posre.itp',
       '-ff',
       'charmm36',
       '-water',
       'tip3p'],
      'stderr_file': 'std.err',
      'stdout_file': 'std.out',
      'store_stdout': True,
      'store_stderr': True,
      'use_shell': True,
      'fizzle_bad_rc': True,
      '_fw_name': 'CmdTask'}]},
   'fw_id': -111,
   'created_on': '2020-03-11T19:54:53.902871',
   'updated_on': '2020-03-11T19:54:53.902872',
   'name': 'gmx_pdb2gro, nmolecules: 394'},
  {'spec': {'_category': 'juwels_noqueue',
    '_files_in': {'coordinate_file': 'in.gro',
     'topology_file': 'in.top',
     'restraint_file': 'in.posre.itp'},
    '_files_out': {'coordinate_file': 'out.gro',
     'topology_file': 'in.top',
     'restraint_file': 'in.posre.itp'},
    'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
     'datetime': '2020-03-11 20:54:53.902961',
     'step': 'gmx_editconf',
     'nmolecules': '394'},
    '_tasks': [{'cmd': 'gmx',
      'opt': ['editconf',
       '-f',
       'in.gro',
       '-o',
       'out.gro',
       '-d',
       2.0,
       '-bt',
       'cubic'],
      'stderr_file': 'std.err',
      'stdout_file': 'std.out',
      'store_stdout': True,
      'store_stderr': True,
      'use_shell': True,
      'fizzle_bad_rc': True,
      '_fw_name': 'CmdTask'}]},
   'fw_id': -112,
   'created_on': '2020-03-11T19:54:53.902970',
   'updated_on': '2020-03-11T19:54:53.902971',
   'name': 'gmx_editconf, nmolecules: 394'},
  {'spec': {'_category': 'juwels_noqueue',
    '_files_in': {'coordinate_file': 'default.gro',
     'topology_file': 'default.top',
     'restraint_file': 'default.posre.itp'},
    'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
     'datetime': '2020-03-11 20:54:53.902998',
     'step': 'push',
     'nmolecules': '394'},
    '_tasks': [{'compress': True,
      'paths': 'default.gro',
      'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
       'datetime': '2020-03-11 20:54:53.902977',
       'type': 'initial_config_gro',
       'nmolecules': '394'},
      '_fw_name': 'AddFilesTask'},
     {'compress': True,
      'paths': 'default.top',
      'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
       'datetime': '2020-03-11 20:54:53.902985',
       'type': 'initial_config_top',
       'nmolecules': '394'},
      '_fw_name': 'AddFilesTask'},
     {'compress': True,
      'paths': 'default.posre.itp',
      'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
       'datetime': '2020-03-11 20:54:53.902990',
       'type': 'initial_config_posre_itp',
       'nmolecules': '394'},
      '_fw_name': 'AddFilesTask'}]},
   'fw_id': -113,
   'created_on': '2020-03-11T19:54:53.903004',
   'updated_on': '2020-03-11T19:54:53.903005',
   'name': 'push, nmolecules: 394'},
  {'spec': {'_category': 'juwels_noqueue',
    '_files_in': {},
    '_files_out': {'data_file': 'in.pdb'},
    'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
     'datetime': '2020-03-11 20:54:53.903016',
     'step': 'fetch',
     'nmolecules': '438'},
    '_tasks': [{'query': {'metadata->project': 'juwels-packmol-2020-03-09',
       'metadata->type': 'initial_config',
       'metadata->nmolecules': '438'},
      'sort_key': 'metadata.datetime',
      'sort_direction': -1,
      'limit': 1,
      'new_file_names': ['in.pdb'],
      '_fw_name': 'GetFilesByQueryTask'}]},
   'fw_id': -114,
   'created_on': '2020-03-11T19:54:53.903022',
   'updated_on': '2020-03-11T19:54:53.903023',
   'name': 'fetch, nmolecules: 438'},
  {'spec': {'_category': 'juwels_noqueue',
    '_files_in': {'data_file': 'in.pdb'},
    '_files_out': {'data_file': 'out.pdb'},
    'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
     'datetime': '2020-03-11 20:54:53.903032',
     'step': 'pdb_chain',
     'nmolecules': '438'},
    '_tasks': [{'cmd': 'pdb_chain',
      'opt': ['< in.pdb > out.pdb'],
      'store_stdout': False,
      'store_stderr': False,
      'use_shell': True,
      'fizzle_bad_rc': True,
      '_fw_name': 'CmdTask'}]},
   'fw_id': -115,
   'created_on': '2020-03-11T19:54:53.903039',
   'updated_on': '2020-03-11T19:54:53.903039',
   'name': 'pdb_chain, nmolecules: 438'},
  {'spec': {'_category': 'juwels_noqueue',
    '_files_in': {'data_file': 'in.pdb'},
    '_files_out': {'data_file': 'out.pdb'},
    'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
     'datetime': '2020-03-11 20:54:53.903049',
     'step': 'pdb_tidy',
     'nmolecules': '438'},
    '_tasks': [{'cmd': 'pdb_tidy',
      'opt': ['< in.pdb > out.pdb'],
      'store_stdout': False,
      'store_stderr': False,
      'use_shell': True,
      'fizzle_bad_rc': True,
      '_fw_name': 'CmdTask'}]},
   'fw_id': -116,
   'created_on': '2020-03-11T19:54:53.903055',
   'updated_on': '2020-03-11T19:54:53.903056',
   'name': 'pdb_tidy, nmolecules: 438'},
  {'spec': {'_category': 'juwels_noqueue',
    '_files_in': {'data_file': 'in.pdb'},
    '_files_out': {'coordinate_file': 'out.gro',
     'topology_file': 'out.top',
     'restraint_file': 'out.posre.itp'},
    'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
     'datetime': '2020-03-11 20:54:53.903066',
     'step': 'gmx_pdb2gro',
     'nmolecules': '438'},
    '_tasks': [{'cmd': 'gmx',
      'opt': ['pdb2gmx',
       '-f',
       'in.pdb',
       '-o',
       'out.gro',
       '-p',
       'out.top',
       '-i',
       'out.posre.itp',
       '-ff',
       'charmm36',
       '-water',
       'tip3p'],
      'stderr_file': 'std.err',
      'stdout_file': 'std.out',
      'store_stdout': True,
      'store_stderr': True,
      'use_shell': True,
      'fizzle_bad_rc': True,
      '_fw_name': 'CmdTask'}]},
   'fw_id': -117,
   'created_on': '2020-03-11T19:54:53.903072',
   'updated_on': '2020-03-11T19:54:53.903073',
   'name': 'gmx_pdb2gro, nmolecules: 438'},
  {'spec': {'_category': 'juwels_noqueue',
    '_files_in': {'coordinate_file': 'in.gro',
     'topology_file': 'in.top',
     'restraint_file': 'in.posre.itp'},
    '_files_out': {'coordinate_file': 'out.gro',
     'topology_file': 'in.top',
     'restraint_file': 'in.posre.itp'},
    'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
     'datetime': '2020-03-11 20:54:53.903083',
     'step': 'gmx_editconf',
     'nmolecules': '438'},
    '_tasks': [{'cmd': 'gmx',
      'opt': ['editconf',
       '-f',
       'in.gro',
       '-o',
       'out.gro',
       '-d',
       2.0,
       '-bt',
       'cubic'],
      'stderr_file': 'std.err',
      'stdout_file': 'std.out',
      'store_stdout': True,
      'store_stderr': True,
      'use_shell': True,
      'fizzle_bad_rc': True,
      '_fw_name': 'CmdTask'}]},
   'fw_id': -118,
   'created_on': '2020-03-11T19:54:53.903089',
   'updated_on': '2020-03-11T19:54:53.903090',
   'name': 'gmx_editconf, nmolecules: 438'},
  {'spec': {'_category': 'juwels_noqueue',
    '_files_in': {'coordinate_file': 'default.gro',
     'topology_file': 'default.top',
     'restraint_file': 'default.posre.itp'},
    'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
     'datetime': '2020-03-11 20:54:53.903114',
     'step': 'push',
     'nmolecules': '438'},
    '_tasks': [{'compress': True,
      'paths': 'default.gro',
      'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
       'datetime': '2020-03-11 20:54:53.903094',
       'type': 'initial_config_gro',
       'nmolecules': '438'},
      '_fw_name': 'AddFilesTask'},
     {'compress': True,
      'paths': 'default.top',
      'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
       'datetime': '2020-03-11 20:54:53.903100',
       'type': 'initial_config_top',
       'nmolecules': '438'},
      '_fw_name': 'AddFilesTask'},
     {'compress': True,
      'paths': 'default.posre.itp',
      'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
       'datetime': '2020-03-11 20:54:53.903106',
       'type': 'initial_config_posre_itp',
       'nmolecules': '438'},
      '_fw_name': 'AddFilesTask'}]},
   'fw_id': -119,
   'created_on': '2020-03-11T19:54:53.903120',
   'updated_on': '2020-03-11T19:54:53.903120',
   'name': 'push, nmolecules: 438'},
  {'spec': {'_category': 'juwels_noqueue',
    '_files_in': {},
    '_files_out': {'data_file': 'in.pdb'},
    'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
     'datetime': '2020-03-11 20:54:53.903131',
     'step': 'fetch',
     'nmolecules': '481'},
    '_tasks': [{'query': {'metadata->project': 'juwels-packmol-2020-03-09',
       'metadata->type': 'initial_config',
       'metadata->nmolecules': '481'},
      'sort_key': 'metadata.datetime',
      'sort_direction': -1,
      'limit': 1,
      'new_file_names': ['in.pdb'],
      '_fw_name': 'GetFilesByQueryTask'}]},
   'fw_id': -120,
   'created_on': '2020-03-11T19:54:53.903137',
   'updated_on': '2020-03-11T19:54:53.903137',
   'name': 'fetch, nmolecules: 481'},
  {'spec': {'_category': 'juwels_noqueue',
    '_files_in': {'data_file': 'in.pdb'},
    '_files_out': {'data_file': 'out.pdb'},
    'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
     'datetime': '2020-03-11 20:54:53.903147',
     'step': 'pdb_chain',
     'nmolecules': '481'},
    '_tasks': [{'cmd': 'pdb_chain',
      'opt': ['< in.pdb > out.pdb'],
      'store_stdout': False,
      'store_stderr': False,
      'use_shell': True,
      'fizzle_bad_rc': True,
      '_fw_name': 'CmdTask'}]},
   'fw_id': -121,
   'created_on': '2020-03-11T19:54:53.903154',
   'updated_on': '2020-03-11T19:54:53.903154',
   'name': 'pdb_chain, nmolecules: 481'},
  {'spec': {'_category': 'juwels_noqueue',
    '_files_in': {'data_file': 'in.pdb'},
    '_files_out': {'data_file': 'out.pdb'},
    'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
     'datetime': '2020-03-11 20:54:53.903164',
     'step': 'pdb_tidy',
     'nmolecules': '481'},
    '_tasks': [{'cmd': 'pdb_tidy',
      'opt': ['< in.pdb > out.pdb'],
      'store_stdout': False,
      'store_stderr': False,
      'use_shell': True,
      'fizzle_bad_rc': True,
      '_fw_name': 'CmdTask'}]},
   'fw_id': -122,
   'created_on': '2020-03-11T19:54:53.903170',
   'updated_on': '2020-03-11T19:54:53.903170',
   'name': 'pdb_tidy, nmolecules: 481'},
  {'spec': {'_category': 'juwels_noqueue',
    '_files_in': {'data_file': 'in.pdb'},
    '_files_out': {'coordinate_file': 'out.gro',
     'topology_file': 'out.top',
     'restraint_file': 'out.posre.itp'},
    'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
     'datetime': '2020-03-11 20:54:53.903180',
     'step': 'gmx_pdb2gro',
     'nmolecules': '481'},
    '_tasks': [{'cmd': 'gmx',
      'opt': ['pdb2gmx',
       '-f',
       'in.pdb',
       '-o',
       'out.gro',
       '-p',
       'out.top',
       '-i',
       'out.posre.itp',
       '-ff',
       'charmm36',
       '-water',
       'tip3p'],
      'stderr_file': 'std.err',
      'stdout_file': 'std.out',
      'store_stdout': True,
      'store_stderr': True,
      'use_shell': True,
      'fizzle_bad_rc': True,
      '_fw_name': 'CmdTask'}]},
   'fw_id': -123,
   'created_on': '2020-03-11T19:54:53.903186',
   'updated_on': '2020-03-11T19:54:53.903187',
   'name': 'gmx_pdb2gro, nmolecules: 481'},
  {'spec': {'_category': 'juwels_noqueue',
    '_files_in': {'coordinate_file': 'in.gro',
     'topology_file': 'in.top',
     'restraint_file': 'in.posre.itp'},
    '_files_out': {'coordinate_file': 'out.gro',
     'topology_file': 'in.top',
     'restraint_file': 'in.posre.itp'},
    'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
     'datetime': '2020-03-11 20:54:53.903197',
     'step': 'gmx_editconf',
     'nmolecules': '481'},
    '_tasks': [{'cmd': 'gmx',
      'opt': ['editconf',
       '-f',
       'in.gro',
       '-o',
       'out.gro',
       '-d',
       2.0,
       '-bt',
       'cubic'],
      'stderr_file': 'std.err',
      'stdout_file': 'std.out',
      'store_stdout': True,
      'store_stderr': True,
      'use_shell': True,
      'fizzle_bad_rc': True,
      '_fw_name': 'CmdTask'}]},
   'fw_id': -124,
   'created_on': '2020-03-11T19:54:53.903203',
   'updated_on': '2020-03-11T19:54:53.903204',
   'name': 'gmx_editconf, nmolecules: 481'},
  {'spec': {'_category': 'juwels_noqueue',
    '_files_in': {'coordinate_file': 'default.gro',
     'topology_file': 'default.top',
     'restraint_file': 'default.posre.itp'},
    'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
     'datetime': '2020-03-11 20:54:53.903227',
     'step': 'push',
     'nmolecules': '481'},
    '_tasks': [{'compress': True,
      'paths': 'default.gro',
      'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
       'datetime': '2020-03-11 20:54:53.903207',
       'type': 'initial_config_gro',
       'nmolecules': '481'},
      '_fw_name': 'AddFilesTask'},
     {'compress': True,
      'paths': 'default.top',
      'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
       'datetime': '2020-03-11 20:54:53.903214',
       'type': 'initial_config_top',
       'nmolecules': '481'},
      '_fw_name': 'AddFilesTask'},
     {'compress': True,
      'paths': 'default.posre.itp',
      'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
       'datetime': '2020-03-11 20:54:53.903219',
       'type': 'initial_config_posre_itp',
       'nmolecules': '481'},
      '_fw_name': 'AddFilesTask'}]},
   'fw_id': -125,
   'created_on': '2020-03-11T19:54:53.903233',
   'updated_on': '2020-03-11T19:54:53.903233',
   'name': 'push, nmolecules: 481'},
  {'spec': {'_category': 'juwels_noqueue',
    '_files_in': {},
    '_files_out': {'data_file': 'in.pdb'},
    'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
     'datetime': '2020-03-11 20:54:53.903244',
     'step': 'fetch',
     'nmolecules': '525'},
    '_tasks': [{'query': {'metadata->project': 'juwels-packmol-2020-03-09',
       'metadata->type': 'initial_config',
       'metadata->nmolecules': '525'},
      'sort_key': 'metadata.datetime',
      'sort_direction': -1,
      'limit': 1,
      'new_file_names': ['in.pdb'],
      '_fw_name': 'GetFilesByQueryTask'}]},
   'fw_id': -126,
   'created_on': '2020-03-11T19:54:53.903250',
   'updated_on': '2020-03-11T19:54:53.903251',
   'name': 'fetch, nmolecules: 525'},
  {'spec': {'_category': 'juwels_noqueue',
    '_files_in': {'data_file': 'in.pdb'},
    '_files_out': {'data_file': 'out.pdb'},
    'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
     'datetime': '2020-03-11 20:54:53.903260',
     'step': 'pdb_chain',
     'nmolecules': '525'},
    '_tasks': [{'cmd': 'pdb_chain',
      'opt': ['< in.pdb > out.pdb'],
      'store_stdout': False,
      'store_stderr': False,
      'use_shell': True,
      'fizzle_bad_rc': True,
      '_fw_name': 'CmdTask'}]},
   'fw_id': -127,
   'created_on': '2020-03-11T19:54:53.903267',
   'updated_on': '2020-03-11T19:54:53.903267',
   'name': 'pdb_chain, nmolecules: 525'},
  {'spec': {'_category': 'juwels_noqueue',
    '_files_in': {'data_file': 'in.pdb'},
    '_files_out': {'data_file': 'out.pdb'},
    'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
     'datetime': '2020-03-11 20:54:53.903276',
     'step': 'pdb_tidy',
     'nmolecules': '525'},
    '_tasks': [{'cmd': 'pdb_tidy',
      'opt': ['< in.pdb > out.pdb'],
      'store_stdout': False,
      'store_stderr': False,
      'use_shell': True,
      'fizzle_bad_rc': True,
      '_fw_name': 'CmdTask'}]},
   'fw_id': -128,
   'created_on': '2020-03-11T19:54:53.903283',
   'updated_on': '2020-03-11T19:54:53.903283',
   'name': 'pdb_tidy, nmolecules: 525'},
  {'spec': {'_category': 'juwels_noqueue',
    '_files_in': {'data_file': 'in.pdb'},
    '_files_out': {'coordinate_file': 'out.gro',
     'topology_file': 'out.top',
     'restraint_file': 'out.posre.itp'},
    'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
     'datetime': '2020-03-11 20:54:53.903293',
     'step': 'gmx_pdb2gro',
     'nmolecules': '525'},
    '_tasks': [{'cmd': 'gmx',
      'opt': ['pdb2gmx',
       '-f',
       'in.pdb',
       '-o',
       'out.gro',
       '-p',
       'out.top',
       '-i',
       'out.posre.itp',
       '-ff',
       'charmm36',
       '-water',
       'tip3p'],
      'stderr_file': 'std.err',
      'stdout_file': 'std.out',
      'store_stdout': True,
      'store_stderr': True,
      'use_shell': True,
      'fizzle_bad_rc': True,
      '_fw_name': 'CmdTask'}]},
   'fw_id': -129,
   'created_on': '2020-03-11T19:54:53.903299',
   'updated_on': '2020-03-11T19:54:53.903299',
   'name': 'gmx_pdb2gro, nmolecules: 525'},
  {'spec': {'_category': 'juwels_noqueue',
    '_files_in': {'coordinate_file': 'in.gro',
     'topology_file': 'in.top',
     'restraint_file': 'in.posre.itp'},
    '_files_out': {'coordinate_file': 'out.gro',
     'topology_file': 'in.top',
     'restraint_file': 'in.posre.itp'},
    'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
     'datetime': '2020-03-11 20:54:53.903309',
     'step': 'gmx_editconf',
     'nmolecules': '525'},
    '_tasks': [{'cmd': 'gmx',
      'opt': ['editconf',
       '-f',
       'in.gro',
       '-o',
       'out.gro',
       '-d',
       2.0,
       '-bt',
       'cubic'],
      'stderr_file': 'std.err',
      'stdout_file': 'std.out',
      'store_stdout': True,
      'store_stderr': True,
      'use_shell': True,
      'fizzle_bad_rc': True,
      '_fw_name': 'CmdTask'}]},
   'fw_id': -130,
   'created_on': '2020-03-11T19:54:53.903315',
   'updated_on': '2020-03-11T19:54:53.903316',
   'name': 'gmx_editconf, nmolecules: 525'},
  {'spec': {'_category': 'juwels_noqueue',
    '_files_in': {'coordinate_file': 'default.gro',
     'topology_file': 'default.top',
     'restraint_file': 'default.posre.itp'},
    'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
     'datetime': '2020-03-11 20:54:53.903340',
     'step': 'push',
     'nmolecules': '525'},
    '_tasks': [{'compress': True,
      'paths': 'default.gro',
      'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
       'datetime': '2020-03-11 20:54:53.903320',
       'type': 'initial_config_gro',
       'nmolecules': '525'},
      '_fw_name': 'AddFilesTask'},
     {'compress': True,
      'paths': 'default.top',
      'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
       'datetime': '2020-03-11 20:54:53.903326',
       'type': 'initial_config_top',
       'nmolecules': '525'},
      '_fw_name': 'AddFilesTask'},
     {'compress': True,
      'paths': 'default.posre.itp',
      'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
       'datetime': '2020-03-11 20:54:53.903332',
       'type': 'initial_config_posre_itp',
       'nmolecules': '525'},
      '_fw_name': 'AddFilesTask'}]},
   'fw_id': -131,
   'created_on': '2020-03-11T19:54:53.903346',
   'updated_on': '2020-03-11T19:54:53.903346',
   'name': 'push, nmolecules: 525'}],
 'links': {'-59': [-60,
   -66,
   -72,
   -78,
   -84,
   -90,
   -96,
   -102,
   -108,
   -114,
   -120,
   -126],
  '-60': [-61],
  '-61': [-62],
  '-62': [-63],
  '-63': [-64],
  '-64': [-65],
  '-65': [],
  '-66': [-67],
  '-67': [-68],
  '-68': [-69],
  '-69': [-70],
  '-70': [-71],
  '-71': [],
  '-72': [-73],
  '-73': [-74],
  '-74': [-75],
  '-75': [-76],
  '-76': [-77],
  '-77': [],
  '-78': [-79],
  '-79': [-80],
  '-80': [-81],
  '-81': [-82],
  '-82': [-83],
  '-83': [],
  '-84': [-85],
  '-85': [-86],
  '-86': [-87],
  '-87': [-88],
  '-88': [-89],
  '-89': [],
  '-90': [-91],
  '-91': [-92],
  '-92': [-93],
  '-93': [-94],
  '-94': [-95],
  '-95': [],
  '-96': [-97],
  '-97': [-98],
  '-98': [-99],
  '-99': [-100],
  '-100': [-101],
  '-101': [],
  '-102': [-103],
  '-103': [-104],
  '-104': [-105],
  '-105': [-106],
  '-106': [-107],
  '-107': [],
  '-108': [-109],
  '-109': [-110],
  '-110': [-111],
  '-111': [-112],
  '-112': [-113],
  '-113': [],
  '-114': [-115],
  '-115': [-116],
  '-116': [-117],
  '-117': [-118],
  '-118': [-119],
  '-119': [],
  '-120': [-121],
  '-121': [-122],
  '-122': [-123],
  '-123': [-124],
  '-124': [-125],
  '-125': [],
  '-126': [-127],
  '-127': [-128],
  '-128': [-129],
  '-129': [-130],
  '-130': [-131],
  '-131': []},
 'name': 'GROMACS preparations juwels_devel, juwels-gromacs-prep-2020-03-11',
 'metadata': {'project': 'juwels-gromacs-prep-2020-03-11',
  'datetime': '2020-03-11 20:54:53.903480',
  'type': 'gmx_prep'},
 'updated_on': datetime.datetime(2020, 3, 11, 19, 54, 53, 903881),
 'created_on': datetime.datetime(2020, 3, 11, 19, 54, 53, 903879)}
In [109]:
lp.add_wf(wf)
2020-03-11 20:55:03,110 INFO Added a workflow. id_map: {-131: 24067, -130: 24068, -129: 24069, -128: 24070, -127: 24071, -126: 24072, -125: 24073, -124: 24074, -123: 24075, -122: 24076, -121: 24077, -120: 24078, -119: 24079, -118: 24080, -117: 24081, -116: 24082, -115: 24083, -114: 24084, -113: 24085, -112: 24086, -111: 24087, -110: 24088, -109: 24089, -108: 24090, -107: 24091, -106: 24092, -105: 24093, -104: 24094, -103: 24095, -102: 24096, -101: 24097, -100: 24098, -99: 24099, -98: 24100, -97: 24101, -96: 24102, -95: 24103, -94: 24104, -93: 24105, -92: 24106, -91: 24107, -90: 24108, -89: 24109, -88: 24110, -87: 24111, -86: 24112, -85: 24113, -84: 24114, -83: 24115, -82: 24116, -81: 24117, -80: 24118, -79: 24119, -78: 24120, -77: 24121, -76: 24122, -75: 24123, -74: 24124, -73: 24125, -72: 24126, -71: 24127, -70: 24128, -69: 24129, -68: 24130, -67: 24131, -66: 24132, -65: 24133, -64: 24134, -63: 24135, -62: 24136, -61: 24137, -60: 24138, -59: 24139}
INFO:launchpad:Added a workflow. id_map: {-131: 24067, -130: 24068, -129: 24069, -128: 24070, -127: 24071, -126: 24072, -125: 24073, -124: 24074, -123: 24075, -122: 24076, -121: 24077, -120: 24078, -119: 24079, -118: 24080, -117: 24081, -116: 24082, -115: 24083, -114: 24084, -113: 24085, -112: 24086, -111: 24087, -110: 24088, -109: 24089, -108: 24090, -107: 24091, -106: 24092, -105: 24093, -104: 24094, -103: 24095, -102: 24096, -101: 24097, -100: 24098, -99: 24099, -98: 24100, -97: 24101, -96: 24102, -95: 24103, -94: 24104, -93: 24105, -92: 24106, -91: 24107, -90: 24108, -89: 24109, -88: 24110, -87: 24111, -86: 24112, -85: 24113, -84: 24114, -83: 24115, -82: 24116, -81: 24117, -80: 24118, -79: 24119, -78: 24120, -77: 24121, -76: 24122, -75: 24123, -74: 24124, -73: 24125, -72: 24126, -71: 24127, -70: 24128, -69: 24129, -68: 24130, -67: 24131, -66: 24132, -65: 24133, -64: 24134, -63: 24135, -62: 24136, -61: 24137, -60: 24138, -59: 24139}
Out[109]:
{-131: 24067,
 -130: 24068,
 -129: 24069,
 -128: 24070,
 -127: 24071,
 -126: 24072,
 -125: 24073,
 -124: 24074,
 -123: 24075,
 -122: 24076,
 -121: 24077,
 -120: 24078,
 -119: 24079,
 -118: 24080,
 -117: 24081,
 -116: 24082,
 -115: 24083,
 -114: 24084,
 -113: 24085,
 -112: 24086,
 -111: 24087,
 -110: 24088,
 -109: 24089,
 -108: 24090,
 -107: 24091,
 -106: 24092,
 -105: 24093,
 -104: 24094,
 -103: 24095,
 -102: 24096,
 -101: 24097,
 -100: 24098,
 -99: 24099,
 -98: 24100,
 -97: 24101,
 -96: 24102,
 -95: 24103,
 -94: 24104,
 -93: 24105,
 -92: 24106,
 -91: 24107,
 -90: 24108,
 -89: 24109,
 -88: 24110,
 -87: 24111,
 -86: 24112,
 -85: 24113,
 -84: 24114,
 -83: 24115,
 -82: 24116,
 -81: 24117,
 -80: 24118,
 -79: 24119,
 -78: 24120,
 -77: 24121,
 -76: 24122,
 -75: 24123,
 -74: 24124,
 -73: 24125,
 -72: 24126,
 -71: 24127,
 -70: 24128,
 -69: 24129,
 -68: 24130,
 -67: 24131,
 -66: 24132,
 -65: 24133,
 -64: 24134,
 -63: 24135,
 -62: 24136,
 -61: 24137,
 -60: 24138,
 -59: 24139}
In [111]:
wf.to_file('wf-{:s}.yaml'.format(project_id))

Inspect results

In [93]:
query = { 
    "metadata.project": project_id,
}
fp.filepad.count_documents(query)
Out[93]:
3
In [94]:
query = { 
    "metadata.project": project_id,
    "metadata.type":    'initial_config_gro',
}
fp.filepad.count_documents(query)
Out[94]:
1
In [95]:
parameter_names = ['nmolecules']
In [96]:
gro_list = []

match_aggregation = {
        "$match": query
    }
sort_aggregation = {
        "$sort": { 
            "metadata.datetime": pymongo.DESCENDING,
        }
    }
group_aggregation = { 
    "$group": { 
        "_id": { p: '$metadata.{}'.format(p) for p in parameter_names },
        "degeneracy": {"$sum": 1}, # number matching data sets
        "latest":     {"$first": "$gfs_id"} # unique gridfs id of file
    }
}
aggregation_pipeline = [ match_aggregation, sort_aggregation, group_aggregation ]
cursor = fp.filepad.aggregate(aggregation_pipeline)

for i, c in enumerate(cursor): 
    content, metadata = fp.get_file_by_id(c["latest"])
    with tempfile.NamedTemporaryFile(suffix='.gro') as tmp:
        tmp.write(content)
        gro_list.append(pmd.load_file(tmp.name))
        
    print('.',end='')
print('')
    
.
In [99]:
gro_list
Out[99]:
[<Structure 5765 atoms; 3961 residues; 1804 bonds; PBC (orthogonal); NOT parametrized>]
In [100]:
# with ParmEd and nglview we get automatic bond guessing
pmd_view = nglview.show_parmed(gro_list[0])
pmd_view.clear_representations()
pmd_view.background = 'white'
pmd_view.add_representation('ball+stick')
pmd_view
In [98]:
system_selection = gro_list
nx = 3
ny = len(system_selection)
view_labels = ['xy','xz','yz']

molecule_counter = lambda s: np.count_nonzero([r.name == 'SDS' for r in s.residues])

label_generator = lambda i,j: '{:d} SDS, {:s} projection'.format(
    molecule_counter(system_selection[i]),view_labels[j])

figsize = (4*nx,4*ny)
fig, axes = plt.subplots(ny,3,figsize=figsize)

for i,system in enumerate(system_selection):
    system_ase = ase.Atoms(
        numbers=[1 if a.atomic_number == 0 else a.atomic_number for a in system.atoms],
        positions=system.get_coordinates(0))
    
    C_shell, R_sq_shell = miniball.get_bounding_ball(system_ase.get_positions())
    R_shell = np.sqrt(R_sq_shell)
    plot_side_views_with_spheres(
        system_ase,[C,C_shell],[R,R_shell],fig=fig,ax=axes[i,:])
    
    for j, ax in enumerate(axes[i,:]):
        ax.set_title(label_generator(i,j))
        
    del system_ase
    gc.collect()
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-98-bb9f2727eedf> in <module>
     20     R_shell = np.sqrt(R_sq_shell)
     21     plot_side_views_with_spheres(
---> 22         system_ase,[C,C_shell],[R,R_shell],fig=fig,ax=axes[i,:])
     23 
     24     for j, ax in enumerate(axes[i,:]):

IndexError: too many indices for array

Energy minimization with restraints

Just to be safe, relax the system a little with positional constraints applied to all ions.

Compile system

In [308]:
os.getcwd()
Out[308]:
'/mnt/dat/work/testuser/indenter/sandbox/20191110_packmol'
In [310]:
em_mdp = gromacs.fileformats.MDP('em.mdp.template')
# no change
em_mdp.write('em.mdp')
In [311]:
gmx_grompp = gromacs.grompp.Popen(
    f='em.mdp',c=gro,r=gro,o='em.tpr',p=top,
    stdout=subprocess.PIPE,stderr=subprocess.PIPE)

out = gmx_grompp.stdout.read()
err = gmx_grompp.stderr.read()
In [312]:
print(err)
                      :-) GROMACS - gmx grompp, 2018.1 (-:

                            GROMACS is written by:
     Emile Apol      Rossen Apostolov      Paul Bauer     Herman J.C. Berendsen
    Par Bjelkmar    Aldert van Buuren   Rudi van Drunen     Anton Feenstra  
  Gerrit Groenhof    Aleksei Iupinov   Christoph Junghans   Anca Hamuraru   
 Vincent Hindriksen Dimitrios Karkoulis    Peter Kasson        Jiri Kraus    
  Carsten Kutzner      Per Larsson      Justin A. Lemkul    Viveca Lindahl  
  Magnus Lundborg   Pieter Meulenhoff    Erik Marklund      Teemu Murtola   
    Szilard Pall       Sander Pronk      Roland Schulz     Alexey Shvetsov  
   Michael Shirts     Alfons Sijbers     Peter Tieleman    Teemu Virolainen 
 Christian Wennberg    Maarten Wolf   
                           and the project leaders:
        Mark Abraham, Berk Hess, Erik Lindahl, and David van der Spoel

Copyright (c) 1991-2000, University of Groningen, The Netherlands.
Copyright (c) 2001-2017, The GROMACS development team at
Uppsala University, Stockholm University and
the Royal Institute of Technology, Sweden.
check out http://www.gromacs.org for more information.

GROMACS is free software; you can redistribute it and/or modify it
under the terms of the GNU Lesser General Public License
as published by the Free Software Foundation; either version 2.1
of the License, or (at your option) any later version.

GROMACS:      gmx grompp, version 2018.1
Executable:   /opt/apps/gromacs/2018.1-gnu-7.3-openmpi-2.1.1/bin/gmx
Data prefix:  /opt/apps/gromacs/2018.1-gnu-7.3-openmpi-2.1.1
Working dir:  /mnt/dat/work/testuser/indenter/sandbox/20191110_packmol
Command line:
  gmx grompp -f em.mdp -c 200_SDS_on_50_Ang_AFM_tip_model_boxed.gro -r 200_SDS_on_50_Ang_AFM_tip_model_boxed.gro -o em.tpr -p sys.top

Replacing old mdp entry 'nstxtcout' by 'nstxout-compressed'

NOTE 1 [file em.mdp]:
  With Verlet lists the optimal nstlist is >= 10, with GPUs >= 20. Note
  that with the Verlet scheme, nstlist has no effect on the accuracy of
  your simulation.

Setting the LD random seed to 669703883
Generated 98320 of the 98346 non-bonded parameter combinations
Generating 1-4 interactions: fudge = 1
Generated 64935 of the 98346 1-4 parameter combinations
Excluding 3 bonded neighbours molecule type 'Substrate'
Excluding 3 bonded neighbours molecule type 'Surfactant'
Excluding 1 bonded neighbours molecule type 'NA'
Removing all charge groups because cutoff-scheme=Verlet
Number of degrees of freedom in T-Coupling group rest is 25797.00
Estimate for the relative computational load of the PME mesh part: 0.84

NOTE 2 [file em.mdp]:
  The optimal PME mesh load for parallel simulations is below 0.5
  and for highly parallel simulations between 0.25 and 0.33,
  for higher performance, increase the cut-off and the PME grid spacing.



There were 2 notes

Back Off! I just backed up em.tpr to ./#em.tpr.1#

GROMACS reminds you: "California, R.I.P." (Red Hot Chili Peppars)


In [313]:
print(out)
Analysing residue names:
There are:  3873  Substrate residues
There are:   200 Surfactant residues
There are:   200        Ion residues
Analysing residues not classified as Protein/DNA/RNA/Water and splitting into groups...
Analysing residues not classified as Protein/DNA/RNA/Water and splitting into groups...
Analysing residues not classified as Protein/DNA/RNA/Water and splitting into groups...
Calculating fourier grid dimensions for X Y Z
Using a fourier grid of 120x120x120, spacing 0.113 0.113 0.113
This run will generate roughly 51 Mb of data

Run energy minimization

In [314]:
gmx_mdrun = gromacs.mdrun.Popen(
    deffnm='em',v=True,
    stdout=subprocess.PIPE,stderr=subprocess.PIPE)
In [316]:
for line in gmx_mdrun.stdout: 
    print(line.decode(), end='')
In [317]:
out = gmx_mdrun.stdout.read()
err = gmx_mdrun.stderr.read()
In [318]:
print(err)
                      :-) GROMACS - gmx mdrun, 2018.1 (-:

                            GROMACS is written by:
     Emile Apol      Rossen Apostolov      Paul Bauer     Herman J.C. Berendsen
    Par Bjelkmar    Aldert van Buuren   Rudi van Drunen     Anton Feenstra  
  Gerrit Groenhof    Aleksei Iupinov   Christoph Junghans   Anca Hamuraru   
 Vincent Hindriksen Dimitrios Karkoulis    Peter Kasson        Jiri Kraus    
  Carsten Kutzner      Per Larsson      Justin A. Lemkul    Viveca Lindahl  
  Magnus Lundborg   Pieter Meulenhoff    Erik Marklund      Teemu Murtola   
    Szilard Pall       Sander Pronk      Roland Schulz     Alexey Shvetsov  
   Michael Shirts     Alfons Sijbers     Peter Tieleman    Teemu Virolainen 
 Christian Wennberg    Maarten Wolf   
                           and the project leaders:
        Mark Abraham, Berk Hess, Erik Lindahl, and David van der Spoel

Copyright (c) 1991-2000, University of Groningen, The Netherlands.
Copyright (c) 2001-2017, The GROMACS development team at
Uppsala University, Stockholm University and
the Royal Institute of Technology, Sweden.
check out http://www.gromacs.org for more information.

GROMACS is free software; you can redistribute it and/or modify it
under the terms of the GNU Lesser General Public License
as published by the Free Software Foundation; either version 2.1
of the License, or (at your option) any later version.

GROMACS:      gmx mdrun, version 2018.1
Executable:   /opt/apps/gromacs/2018.1-gnu-7.3-openmpi-2.1.1/bin/gmx
Data prefix:  /opt/apps/gromacs/2018.1-gnu-7.3-openmpi-2.1.1
Working dir:  /mnt/dat/work/testuser/indenter/sandbox/20191110_packmol
Command line:
  gmx mdrun -deffnm em -v


Back Off! I just backed up em.log to ./#em.log.1#
Reading file em.tpr, VERSION 2018.1 (single precision)
The number of OpenMP threads was set by environment variable OMP_NUM_THREADS to 1

NOTE: disabling dynamic load balancing as it is only supported with dynamics, not with integrator 'steep'.

Using 2 MPI threads
Using 1 OpenMP thread per tMPI thread


Back Off! I just backed up em.trr to ./#em.trr.1#

Back Off! I just backed up em.edr to ./#em.edr.1#

Steepest Descents:
   Tolerance (Fmax)   =  1.00000e+02
   Number of steps    =        10000
Step=    0, Dmax= 1.0e-04 nm, Epot= -3.45128e+05 Fmax= 1.53620e+04, atom= 10051
Step=    1, Dmax= 1.0e-04 nm, Epot= -3.45688e+05 Fmax= 1.52315e+04, atom= 10051
Step=    2, Dmax= 1.2e-04 nm, Epot= -3.46362e+05 Fmax= 1.50759e+04, atom= 10051
Step=    3, Dmax= 1.4e-04 nm, Epot= -3.47170e+05 Fmax= 1.48911e+04, atom= 10051
Step=    4, Dmax= 1.7e-04 nm, Epot= -3.48142e+05 Fmax= 1.46719e+04, atom= 10051
Step=    5, Dmax= 2.1e-04 nm, Epot= -3.49309e+05 Fmax= 1.44121e+04, atom= 10051
Step=    6, Dmax= 2.5e-04 nm, Epot= -3.50712e+05 Fmax= 1.41061e+04, atom= 10051
Step=    7, Dmax= 3.0e-04 nm, Epot= -3.52399e+05 Fmax= 1.37462e+04, atom= 10051
Step=    8, Dmax= 3.6e-04 nm, Epot= -3.54426e+05 Fmax= 1.33248e+04, atom= 10051
Step=    9, Dmax= 4.3e-04 nm, Epot= -3.56864e+05 Fmax= 1.28340e+04, atom= 10051
Step=   10, Dmax= 5.2e-04 nm, Epot= -3.59791e+05 Fmax= 1.22655e+04, atom= 10051
Step=   11, Dmax= 6.2e-04 nm, Epot= -3.63303e+05 Fmax= 1.16130e+04, atom= 10051
Step=   12, Dmax= 7.4e-04 nm, Epot= -3.67510e+05 Fmax= 1.08705e+04, atom= 10051
Step=   13, Dmax= 8.9e-04 nm, Epot= -3.72534e+05 Fmax= 1.00359e+04, atom= 10051
Step=   14, Dmax= 1.1e-03 nm, Epot= -3.78501e+05 Fmax= 9.11159e+03, atom= 10051
Step=   15, Dmax= 1.3e-03 nm, Epot= -3.85531e+05 Fmax= 8.10670e+03, atom= 10051
Step=   16, Dmax= 1.5e-03 nm, Epot= -3.93703e+05 Fmax= 7.03899e+03, atom= 10051
Step=   17, Dmax= 1.8e-03 nm, Epot= -4.03009e+05 Fmax= 6.18293e+03, atom= 12347
Step=   18, Dmax= 2.2e-03 nm, Epot= -4.12918e+05 Fmax= 6.02326e+03, atom= 12347
Step=   19, Dmax= 2.7e-03 nm, Epot= -4.21982e+05 Fmax= 5.82860e+03, atom= 12347
Step=   20, Dmax= 3.2e-03 nm, Epot= -4.30198e+05 Fmax= 5.58785e+03, atom= 12347
Step=   21, Dmax= 3.8e-03 nm, Epot= -4.37644e+05 Fmax= 5.28343e+03, atom= 12347
Step=   22, Dmax= 4.6e-03 nm, Epot= -4.44410e+05 Fmax= 4.88708e+03, atom= 12347
Step=   23, Dmax= 5.5e-03 nm, Epot= -4.50524e+05 Fmax= 4.35707e+03, atom= 12347
Step=   24, Dmax= 6.6e-03 nm, Epot= -4.55971e+05 Fmax= 4.07765e+03, atom= 12412
Step=   25, Dmax= 7.9e-03 nm, Epot= -4.60358e+05 Fmax= 3.80468e+03, atom= 12412
Step=   26, Dmax= 9.5e-03 nm, Epot= -4.63958e+05 Fmax= 3.52870e+03, atom= 12412
Step=   27, Dmax= 1.1e-02 nm, Epot= -4.67166e+05 Fmax= 3.25356e+03, atom= 12412
Step=   28, Dmax= 1.4e-02 nm, Epot= -4.70253e+05 Fmax= 2.98256e+03, atom= 12412
Step=   29, Dmax= 1.6e-02 nm, Epot= -4.73309e+05 Fmax= 2.72008e+03, atom= 12412
Step=   30, Dmax= 2.0e-02 nm, Epot= -4.76258e+05 Fmax= 4.49947e+03, atom= 10552
Step=   31, Dmax= 2.4e-02 nm, Epot= -4.75219e+05 Fmax= 2.27425e+04, atom= 10552
Step=   32, Dmax= 1.2e-02 nm, Epot= -4.76762e+05 Fmax= 9.71965e+03, atom= 10552
Step=   33, Dmax= 1.4e-02 nm, Epot= -4.77394e+05 Fmax= 7.54781e+03, atom= 10552
Step=   34, Dmax= 1.7e-02 nm, Epot= -4.77350e+05 Fmax= 1.29121e+04, atom= 10552
Step=   35, Dmax= 8.5e-03 nm, Epot= -4.78015e+05 Fmax= 2.91280e+03, atom= 10552
Step=   36, Dmax= 1.0e-02 nm, Epot= -4.78502e+05 Fmax= 9.28576e+03, atom= 10552
Step=   37, Dmax= 1.2e-02 nm, Epot= -4.79234e+05 Fmax= 5.67222e+03, atom= 10552
Step=   38, Dmax= 1.5e-02 nm, Epot= -4.78856e+05 Fmax= 1.22213e+04, atom= 10552
Step=   39, Dmax= 7.4e-03 nm, Epot= -4.79759e+05 Fmax= 3.32529e+03, atom= 5176
Step=   40, Dmax= 8.9e-03 nm, Epot= -4.80010e+05 Fmax= 7.79363e+03, atom= 5176
Step=   41, Dmax= 1.1e-02 nm, Epot= -4.80656e+05 Fmax= 5.94355e+03, atom= 5176
Step=   42, Dmax= 1.3e-02 nm, Epot= -4.80663e+05 Fmax= 1.01759e+04, atom= 5176
Step=   43, Dmax= 1.5e-02 nm, Epot= -4.81217e+05 Fmax= 9.56938e+03, atom= 5176
Step=   44, Dmax= 1.8e-02 nm, Epot= -4.81028e+05 Fmax= 1.36554e+04, atom= 5176
Step=   45, Dmax= 9.2e-03 nm, Epot= -4.82085e+05 Fmax= 2.36417e+03, atom= 12347
Step=   46, Dmax= 1.1e-02 nm, Epot= -4.82551e+05 Fmax= 1.17012e+04, atom= 5176
Step=   47, Dmax= 1.3e-02 nm, Epot= -4.83379e+05 Fmax= 5.28896e+03, atom= 5176
Step=   48, Dmax= 1.6e-02 nm, Epot= -4.83177e+05 Fmax= 1.56980e+04, atom= 5176
Step=   49, Dmax= 7.9e-03 nm, Epot= -4.83752e+05 Fmax= 5.03177e+03, atom= 5176
Step=   50, Dmax= 9.5e-03 nm, Epot= -4.84081e+05 Fmax= 6.96012e+03, atom= 5176
Step=   51, Dmax= 1.1e-02 nm, Epot= -4.84415e+05 Fmax= 7.88619e+03, atom= 5176
Step=   52, Dmax= 1.4e-02 nm, Epot= -4.84685e+05 Fmax= 9.44443e+03, atom= 5176
Step=   53, Dmax= 1.6e-02 nm, Epot= -4.84897e+05 Fmax= 1.18913e+04, atom= 5176
Step=   54, Dmax= 2.0e-02 nm, Epot= -4.85122e+05 Fmax= 1.30576e+04, atom= 5176
Step=   55, Dmax= 2.4e-02 nm, Epot= -4.85051e+05 Fmax= 1.75757e+04, atom= 5176
Step=   56, Dmax= 1.2e-02 nm, Epot= -4.85951e+05 Fmax= 2.10870e+03, atom= 12347
Step=   57, Dmax= 1.4e-02 nm, Epot= -4.86514e+05 Fmax= 1.57454e+04, atom= 11770
Step=   58, Dmax= 1.7e-02 nm, Epot= -4.87447e+05 Fmax= 6.59096e+03, atom= 11770
Step=   59, Dmax= 2.0e-02 nm, Epot= -4.87079e+05 Fmax= 1.96103e+04, atom= 11770
Step=   60, Dmax= 1.0e-02 nm, Epot= -4.87750e+05 Fmax= 6.78335e+03, atom= 11770
Step=   61, Dmax= 1.2e-02 nm, Epot= -4.88008e+05 Fmax= 9.56282e+03, atom= 11770
Step=   62, Dmax= 1.5e-02 nm, Epot= -4.88307e+05 Fmax= 9.72390e+03, atom= 11770
Step=   63, Dmax= 1.8e-02 nm, Epot= -4.88489e+05 Fmax= 1.37876e+04, atom= 11770
Step=   64, Dmax= 2.1e-02 nm, Epot= -4.88783e+05 Fmax= 1.39434e+04, atom= 11770
Step=   65, Dmax= 2.5e-02 nm, Epot= -4.88834e+05 Fmax= 1.98530e+04, atom= 11770
Step=   66, Dmax= 3.1e-02 nm, Epot= -4.89123e+05 Fmax= 1.98561e+04, atom= 11770
Step=   67, Dmax= 3.7e-02 nm, Epot= -4.88922e+05 Fmax= 2.86059e+04, atom= 11770
Step=   68, Dmax= 1.8e-02 nm, Epot= -4.89901e+05 Fmax= 3.57318e+03, atom= 11770
Step=   69, Dmax= 2.2e-02 nm, Epot= -4.90089e+05 Fmax= 2.46790e+04, atom= 11770
Step=   70, Dmax= 2.6e-02 nm, Epot= -4.91077e+05 Fmax= 9.69374e+03, atom= 11770
Step=   71, Dmax= 3.2e-02 nm, Epot= -4.90432e+05 Fmax= 3.02054e+04, atom= 11770
Step=   72, Dmax= 1.6e-02 nm, Epot= -4.91328e+05 Fmax= 1.09614e+04, atom= 11770
Step=   73, Dmax= 1.9e-02 nm, Epot= -4.91541e+05 Fmax= 1.42429e+04, atom= 11770
Step=   74, Dmax= 2.3e-02 nm, Epot= -4.91772e+05 Fmax= 1.54423e+04, atom= 11770
Step=   75, Dmax= 2.7e-02 nm, Epot= -4.91888e+05 Fmax= 2.07731e+04, atom= 11770
Step=   76, Dmax= 3.3e-02 nm, Epot= -4.92096e+05 Fmax= 2.16826e+04, atom= 11770
Step=   77, Dmax= 3.9e-02 nm, Epot= -4.92002e+05 Fmax= 3.02028e+04, atom= 11770
Step=   78, Dmax= 2.0e-02 nm, Epot= -4.92769e+05 Fmax= 3.33513e+03, atom= 11770
Step=   79, Dmax= 2.4e-02 nm, Epot= -4.93099e+05 Fmax= 2.69529e+04, atom= 11770
Step=   80, Dmax= 2.8e-02 nm, Epot= -4.94027e+05 Fmax= 9.99593e+03, atom= 11770
Step=   81, Dmax= 3.4e-02 nm, Epot= -4.93424e+05 Fmax= 3.24553e+04, atom= 11770
Step=   82, Dmax= 1.7e-02 nm, Epot= -4.94252e+05 Fmax= 1.21050e+04, atom= 11770
Step=   83, Dmax= 2.0e-02 nm, Epot= -4.94461e+05 Fmax= 1.49439e+04, atom= 11770
Step=   84, Dmax= 2.5e-02 nm, Epot= -4.94657e+05 Fmax= 1.68248e+04, atom= 11770
Step=   85, Dmax= 2.9e-02 nm, Epot= -4.94772e+05 Fmax= 2.19975e+04, atom= 11770
Step=   86, Dmax= 3.5e-02 nm, Epot= -4.94933e+05 Fmax= 2.33859e+04, atom= 11770
Step=   87, Dmax= 4.2e-02 nm, Epot= -4.94827e+05 Fmax= 3.21626e+04, atom= 11770
Step=   88, Dmax= 2.1e-02 nm, Epot= -4.95608e+05 Fmax= 3.32182e+03, atom= 11770
Step=   89, Dmax= 2.5e-02 nm, Epot= -4.95845e+05 Fmax= 2.91870e+04, atom= 11770
Step=   90, Dmax= 3.1e-02 nm, Epot= -4.96841e+05 Fmax= 1.05294e+04, atom= 11770
Step=   91, Dmax= 3.7e-02 nm, Epot= -4.96052e+05 Fmax= 3.47017e+04, atom= 11770
Step=   92, Dmax= 1.8e-02 nm, Epot= -4.97029e+05 Fmax= 1.31377e+04, atom= 11770
Step=   93, Dmax= 2.2e-02 nm, Epot= -4.97211e+05 Fmax= 1.58742e+04, atom= 11770
Step=   94, Dmax= 2.6e-02 nm, Epot= -4.97364e+05 Fmax= 1.81356e+04, atom= 11770
Step=   95, Dmax= 3.2e-02 nm, Epot= -4.97434e+05 Fmax= 2.34618e+04, atom= 11770
Step=   96, Dmax= 3.8e-02 nm, Epot= -4.97549e+05 Fmax= 2.50402e+04, atom= 11770
Step=   97, Dmax= 4.6e-02 nm, Epot= -4.97348e+05 Fmax= 3.43875e+04, atom= 11770
Step=   98, Dmax= 2.3e-02 nm, Epot= -4.98299e+05 Fmax= 3.46193e+03, atom= 11770
Step=   99, Dmax= 2.7e-02 nm, Epot= -4.98181e+05 Fmax= 3.14947e+04, atom= 11770
Step=  100, Dmax= 1.4e-02 nm, Epot= -4.98629e+05 Fmax= 1.40622e+04, atom= 11770
Step=  101, Dmax= 1.6e-02 nm, Epot= -4.98974e+05 Fmax= 7.36278e+03, atom= 11770
Step=  102, Dmax= 2.0e-02 nm, Epot= -4.99021e+05 Fmax= 1.77526e+04, atom= 11770
Step=  103, Dmax= 2.4e-02 nm, Epot= -4.99394e+05 Fmax= 1.29280e+04, atom= 11770
Step=  104, Dmax= 2.8e-02 nm, Epot= -4.99221e+05 Fmax= 2.31310e+04, atom= 11770
Step=  105, Dmax= 1.4e-02 nm, Epot= -4.99707e+05 Fmax= 5.67021e+03, atom= 11770
Step=  106, Dmax= 1.7e-02 nm, Epot= -4.99853e+05 Fmax= 1.70452e+04, atom= 11770
Step=  107, Dmax= 2.0e-02 nm, Epot= -5.00216e+05 Fmax= 9.73838e+03, atom= 11770
Step=  108, Dmax= 2.4e-02 nm, Epot= -5.00163e+05 Fmax= 2.30206e+04, atom= 11770
Step=  109, Dmax= 1.2e-02 nm, Epot= -5.00441e+05 Fmax= 6.22474e+03, atom= 11770
Step=  110, Dmax= 1.5e-02 nm, Epot= -5.00632e+05 Fmax= 1.26323e+04, atom= 11770
Step=  111, Dmax= 1.8e-02 nm, Epot= -5.00871e+05 Fmax= 1.04272e+04, atom= 11770
Step=  112, Dmax= 2.1e-02 nm, Epot= -5.00961e+05 Fmax= 1.66805e+04, atom= 11770
Step=  113, Dmax= 2.5e-02 nm, Epot= -5.01179e+05 Fmax= 1.64829e+04, atom= 11770
Step=  114, Dmax= 3.0e-02 nm, Epot= -5.01169e+05 Fmax= 2.23257e+04, atom= 11770
Step=  115, Dmax= 1.5e-02 nm, Epot= -5.01537e+05 Fmax= 3.69546e+03, atom= 11770
Step=  116, Dmax= 1.8e-02 nm, Epot= -5.01843e+05 Fmax= 2.09451e+04, atom= 11770
Step=  117, Dmax= 2.2e-02 nm, Epot= -5.02251e+05 Fmax= 8.10169e+03, atom= 11770
Step=  118, Dmax= 2.6e-02 nm, Epot= -5.02185e+05 Fmax= 2.75013e+04, atom= 11770
Step=  119, Dmax= 1.3e-02 nm, Epot= -5.02440e+05 Fmax= 9.21648e+03, atom= 11770
Step=  120, Dmax= 1.6e-02 nm, Epot= -5.02615e+05 Fmax= 1.11642e+04, atom= 11770
Step=  121, Dmax= 1.9e-02 nm, Epot= -5.02781e+05 Fmax= 1.37808e+04, atom= 11770
Step=  122, Dmax= 2.3e-02 nm, Epot= -5.02932e+05 Fmax= 1.54958e+04, atom= 11770
Step=  123, Dmax= 2.7e-02 nm, Epot= -5.03037e+05 Fmax= 2.03558e+04, atom= 11770
Step=  124, Dmax= 3.3e-02 nm, Epot= -5.03161e+05 Fmax= 2.14961e+04, atom= 11770
Step=  125, Dmax= 3.9e-02 nm, Epot= -5.03118e+05 Fmax= 2.98563e+04, atom= 11770
Step=  126, Dmax= 2.0e-02 nm, Epot= -5.03606e+05 Fmax= 3.13022e+03, atom= 11770
Step=  127, Dmax= 2.4e-02 nm, Epot= -5.03875e+05 Fmax= 2.68034e+04, atom= 11770
Step=  128, Dmax= 2.8e-02 nm, Epot= -5.04526e+05 Fmax= 9.68488e+03, atom= 11770
Step=  129, Dmax= 3.4e-02 nm, Epot= -5.04021e+05 Fmax= 3.21663e+04, atom= 11770
Step=  130, Dmax= 1.7e-02 nm, Epot= -5.04672e+05 Fmax= 1.21760e+04, atom= 11770
Step=  131, Dmax= 2.0e-02 nm, Epot= -5.04814e+05 Fmax= 1.45151e+04, atom= 11770
Step=  132, Dmax= 2.4e-02 nm, Epot= -5.04927e+05 Fmax= 1.68639e+04, atom= 11770
Step=  133, Dmax= 2.9e-02 nm, Epot= -5.04992e+05 Fmax= 2.14184e+04, atom= 11770
Step=  134, Dmax= 3.5e-02 nm, Epot= -5.05065e+05 Fmax= 2.33124e+04, atom= 11770
Step=  135, Dmax= 4.2e-02 nm, Epot= -5.04935e+05 Fmax= 3.14009e+04, atom= 11770
Step=  136, Dmax= 2.1e-02 nm, Epot= -5.05631e+05 Fmax= 3.02275e+03, atom= 11770
Step=  137, Dmax= 2.5e-02 nm, Epot= -5.05541e+05 Fmax= 2.95914e+04, atom= 11770
Step=  138, Dmax= 1.3e-02 nm, Epot= -5.05895e+05 Fmax= 1.32813e+04, atom= 11770
Step=  139, Dmax= 1.5e-02 nm, Epot= -5.06169e+05 Fmax= 6.43450e+03, atom= 11770
Step=  140, Dmax= 1.8e-02 nm, Epot= -5.06181e+05 Fmax= 1.68578e+04, atom= 11770
Step=  141, Dmax= 2.2e-02 nm, Epot= -5.06496e+05 Fmax= 1.13494e+04, atom= 11770
Step=  142, Dmax= 2.6e-02 nm, Epot= -5.06288e+05 Fmax= 2.20577e+04, atom= 10552
Step=  143, Dmax= 1.3e-02 nm, Epot= -5.06735e+05 Fmax= 5.73387e+03, atom= 11770
Step=  144, Dmax= 1.6e-02 nm, Epot= -5.06817e+05 Fmax= 1.50042e+04, atom= 11770
Step=  145, Dmax= 1.9e-02 nm, Epot= -5.07090e+05 Fmax= 9.60745e+03, atom= 11770
Step=  146, Dmax= 2.3e-02 nm, Epot= -5.07028e+05 Fmax= 2.03573e+04, atom= 11770
Step=  147, Dmax= 1.1e-02 nm, Epot= -5.07280e+05 Fmax= 5.04230e+03, atom= 11770
Step=  148, Dmax= 1.4e-02 nm, Epot= -5.07420e+05 Fmax= 1.23862e+04, atom= 11770
Step=  149, Dmax= 1.6e-02 nm, Epot= -5.07636e+05 Fmax= 8.77855e+03, atom= 11770
Step=  150, Dmax= 2.0e-02 nm, Epot= -5.07657e+05 Fmax= 1.62287e+04, atom= 11770
Step=  151, Dmax= 2.4e-02 nm, Epot= -5.07874e+05 Fmax= 1.42057e+04, atom= 11770
Step=  152, Dmax= 2.8e-02 nm, Epot= -5.07768e+05 Fmax= 2.15639e+04, atom= 11770
Step=  153, Dmax= 1.4e-02 nm, Epot= -5.08169e+05 Fmax= 4.30685e+03, atom= 11770
Step=  154, Dmax= 1.7e-02 nm, Epot= -5.08292e+05 Fmax= 1.81891e+04, atom= 11770
Step=  155, Dmax= 2.0e-02 nm, Epot= -5.08628e+05 Fmax= 8.45890e+03, atom= 11770
Step=  156, Dmax= 2.4e-02 nm, Epot= -5.08523e+05 Fmax= 2.40758e+04, atom= 11770
Step=  157, Dmax= 1.2e-02 nm, Epot= -5.08786e+05 Fmax= 7.36969e+03, atom= 11770
Step=  158, Dmax= 1.5e-02 nm, Epot= -5.08915e+05 Fmax= 1.13925e+04, atom= 11770
Step=  159, Dmax= 1.8e-02 nm, Epot= -5.09070e+05 Fmax= 1.14568e+04, atom= 11770
Step=  160, Dmax= 2.1e-02 nm, Epot= -5.09152e+05 Fmax= 1.54595e+04, atom= 11770
Step=  161, Dmax= 2.5e-02 nm, Epot= -5.09272e+05 Fmax= 1.74079e+04, atom= 11770
Step=  162, Dmax= 3.0e-02 nm, Epot= -5.09298e+05 Fmax= 2.10529e+04, atom= 11770
Step=  163, Dmax= 3.6e-02 nm, Epot= -5.09305e+05 Fmax= 2.60497e+04, atom= 11770
Step=  164, Dmax= 4.4e-02 nm, Epot= -5.09273e+05 Fmax= 2.83915e+04, atom= 11770
Step=  165, Dmax= 2.2e-02 nm, Epot= -5.09925e+05 Fmax= 3.06908e+03, atom= 11770
Step=  166, Dmax= 2.6e-02 nm, Epot= -5.10194e+05 Fmax= 3.15308e+04, atom= 11770
Step=  167, Dmax= 3.1e-02 nm, Epot= -5.10778e+05 Fmax= 1.05181e+04, atom= 11770
Step=  168, Dmax= 3.8e-02 nm, Epot= -5.10268e+05 Fmax= 4.08315e+04, atom= 11770
Step=  169, Dmax= 1.9e-02 nm, Epot= -5.10901e+05 Fmax= 1.43084e+04, atom= 11770
Step=  170, Dmax= 2.3e-02 nm, Epot= -5.11033e+05 Fmax= 1.46827e+04, atom= 11770
Step=  171, Dmax= 2.7e-02 nm, Epot= -5.11096e+05 Fmax= 2.08721e+04, atom= 11770
Step=  172, Dmax= 3.3e-02 nm, Epot= -5.11219e+05 Fmax= 2.05230e+04, atom= 11770
Step=  173, Dmax= 3.9e-02 nm, Epot= -5.11146e+05 Fmax= 3.03738e+04, atom= 11770
Step=  174, Dmax= 2.0e-02 nm, Epot= -5.11573e+05 Fmax= 3.75994e+03, atom= 11770
Step=  175, Dmax= 2.4e-02 nm, Epot= -5.11731e+05 Fmax= 2.58569e+04, atom= 11770
Step=  176, Dmax= 2.8e-02 nm, Epot= -5.12212e+05 Fmax= 1.00161e+04, atom= 11770
Step=  177, Dmax= 3.4e-02 nm, Epot= -5.11901e+05 Fmax= 3.15425e+04, atom= 11770
Step=  178, Dmax= 1.7e-02 nm, Epot= -5.12342e+05 Fmax= 1.16598e+04, atom= 11770
Step=  179, Dmax= 2.0e-02 nm, Epot= -5.12459e+05 Fmax= 1.47200e+04, atom= 11770
Step=  180, Dmax= 2.4e-02 nm, Epot= -5.12567e+05 Fmax= 1.63430e+04, atom= 11770
Step=  181, Dmax= 2.9e-02 nm, Epot= -5.12623e+05 Fmax= 2.15046e+04, atom= 11770
Step=  182, Dmax= 3.5e-02 nm, Epot= -5.12701e+05 Fmax= 2.27187e+04, atom= 11770
Step=  183, Dmax= 4.2e-02 nm, Epot= -5.12614e+05 Fmax= 3.12963e+04, atom= 11770
Step=  184, Dmax= 2.1e-02 nm, Epot= -5.13123e+05 Fmax= 3.40113e+03, atom= 11770
Step=  185, Dmax= 2.5e-02 nm, Epot= -5.13214e+05 Fmax= 2.91027e+04, atom= 11770
Step=  186, Dmax= 3.0e-02 nm, Epot= -5.13806e+05 Fmax= 1.00120e+04, atom= 11770
Step=  187, Dmax= 3.6e-02 nm, Epot= -5.13290e+05 Fmax= 3.59184e+04, atom= 11770
Step=  188, Dmax= 1.8e-02 nm, Epot= -5.13908e+05 Fmax= 1.32136e+04, atom= 11770
Step=  189, Dmax= 2.2e-02 nm, Epot= -5.14016e+05 Fmax= 1.48367e+04, atom= 11770
Step=  190, Dmax= 2.6e-02 nm, Epot= -5.14076e+05 Fmax= 1.84669e+04, atom= 11770
Step=  191, Dmax= 3.1e-02 nm, Epot= -5.14131e+05 Fmax= 2.16050e+04, atom= 11770
Step=  192, Dmax= 3.8e-02 nm, Epot= -5.14118e+05 Fmax= 2.56907e+04, atom= 11770
Step=  193, Dmax= 1.9e-02 nm, Epot= -5.14515e+05 Fmax= 2.78344e+03, atom= 11770
Step=  194, Dmax= 2.3e-02 nm, Epot= -5.14728e+05 Fmax= 2.75830e+04, atom= 11770
Step=  195, Dmax= 2.7e-02 nm, Epot= -5.15201e+05 Fmax= 8.44195e+03, atom= 11770
Step=  196, Dmax= 3.3e-02 nm, Epot= -5.14832e+05 Fmax= 3.53835e+04, atom= 11770
Step=  197, Dmax= 1.6e-02 nm, Epot= -5.15297e+05 Fmax= 1.27975e+04, atom= 11770
Step=  198, Dmax= 2.0e-02 nm, Epot= -5.15414e+05 Fmax= 1.21777e+04, atom= 11770
Step=  199, Dmax= 2.3e-02 nm, Epot= -5.15454e+05 Fmax= 1.83724e+04, atom= 11770
Step=  200, Dmax= 2.8e-02 nm, Epot= -5.15568e+05 Fmax= 1.73288e+04, atom= 11770
Step=  201, Dmax= 3.4e-02 nm, Epot= -5.15497e+05 Fmax= 2.64991e+04, atom= 11770
Step=  202, Dmax= 1.7e-02 nm, Epot= -5.15826e+05 Fmax= 3.70604e+03, atom= 11770
Step=  203, Dmax= 2.0e-02 nm, Epot= -5.15915e+05 Fmax= 2.17099e+04, atom= 11770
Step=  204, Dmax= 2.4e-02 nm, Epot= -5.16254e+05 Fmax= 9.14184e+03, atom= 11770
Step=  205, Dmax= 2.9e-02 nm, Epot= -5.16031e+05 Fmax= 2.69136e+04, atom= 11770
Step=  206, Dmax= 1.5e-02 nm, Epot= -5.16358e+05 Fmax= 9.50681e+03, atom= 11770
Step=  207, Dmax= 1.8e-02 nm, Epot= -5.16436e+05 Fmax= 1.31736e+04, atom= 11770
Step=  208, Dmax= 2.1e-02 nm, Epot= -5.16531e+05 Fmax= 1.35829e+04, atom= 11770
Step=  209, Dmax= 2.5e-02 nm, Epot= -5.16554e+05 Fmax= 1.89972e+04, atom= 11770
Step=  210, Dmax= 3.0e-02 nm, Epot= -5.16634e+05 Fmax= 1.92018e+04, atom= 11770
Step=  211, Dmax= 3.6e-02 nm, Epot= -5.16541e+05 Fmax= 2.73972e+04, atom= 11770
Step=  212, Dmax= 1.8e-02 nm, Epot= -5.16936e+05 Fmax= 3.44343e+03, atom= 11770
Step=  213, Dmax= 2.2e-02 nm, Epot= -5.16959e+05 Fmax= 2.43116e+04, atom= 11770
Step=  214, Dmax= 2.6e-02 nm, Epot= -5.17370e+05 Fmax= 9.15234e+03, atom= 11770
Step=  215, Dmax= 3.1e-02 nm, Epot= -5.17002e+05 Fmax= 3.05401e+04, atom= 11770
Step=  216, Dmax= 1.6e-02 nm, Epot= -5.17455e+05 Fmax= 1.08455e+04, atom= 11770
Step=  217, Dmax= 1.9e-02 nm, Epot= -5.17524e+05 Fmax= 1.33036e+04, atom= 11770
Step=  218, Dmax= 2.3e-02 nm, Epot= -5.17585e+05 Fmax= 1.54069e+04, atom= 11770
Step=  219, Dmax= 2.7e-02 nm, Epot= -5.17605e+05 Fmax= 1.91611e+04, atom= 11770
Step=  220, Dmax= 3.3e-02 nm, Epot= -5.17620e+05 Fmax= 2.17765e+04, atom= 11770
Step=  221, Dmax= 3.9e-02 nm, Epot= -5.17530e+05 Fmax= 2.73668e+04, atom= 11770
Step=  222, Dmax= 2.0e-02 nm, Epot= -5.18009e+05 Fmax= 2.90214e+03, atom= 11770
Step=  223, Dmax= 2.3e-02 nm, Epot= -5.17958e+05 Fmax= 2.74386e+04, atom= 11770
Step=  224, Dmax= 1.2e-02 nm, Epot= -5.18154e+05 Fmax= 1.17995e+04, atom= 11770
Step=  225, Dmax= 1.4e-02 nm, Epot= -5.18299e+05 Fmax= 6.26674e+03, atom= 11770
Step=  226, Dmax= 1.7e-02 nm, Epot= -5.18304e+05 Fmax= 1.54013e+04, atom= 11770
Step=  227, Dmax= 2.0e-02 nm, Epot= -5.18474e+05 Fmax= 1.04383e+04, atom= 11770
Step=  228, Dmax= 2.4e-02 nm, Epot= -5.18352e+05 Fmax= 2.07295e+04, atom= 11770
Step=  229, Dmax= 1.2e-02 nm, Epot= -5.18610e+05 Fmax= 4.88499e+03, atom= 11770
Step=  230, Dmax= 1.5e-02 nm, Epot= -5.18636e+05 Fmax= 1.37249e+04, atom= 11770
Step=  231, Dmax= 1.7e-02 nm, Epot= -5.18807e+05 Fmax= 8.49270e+03, atom= 11770
Step=  232, Dmax= 2.1e-02 nm, Epot= -5.18701e+05 Fmax= 1.82613e+04, atom= 11770
Step=  233, Dmax= 1.0e-02 nm, Epot= -5.18918e+05 Fmax= 4.97111e+03, atom= 11770
Step=  234, Dmax= 1.3e-02 nm, Epot= -5.18964e+05 Fmax= 1.10634e+04, atom= 11770
Step=  235, Dmax= 1.5e-02 nm, Epot= -5.19087e+05 Fmax= 8.28783e+03, atom= 11770
Step=  236, Dmax= 1.8e-02 nm, Epot= -5.19047e+05 Fmax= 1.48416e+04, atom= 11770
Step=  237, Dmax= 9.1e-03 nm, Epot= -5.19204e+05 Fmax= 3.24629e+03, atom= 11770
Step=  238, Dmax= 1.1e-02 nm, Epot= -5.19269e+05 Fmax= 1.08178e+04, atom= 11770
Step=  239, Dmax= 1.3e-02 nm, Epot= -5.19422e+05 Fmax= 5.86703e+03, atom= 11770
Step=  240, Dmax= 1.6e-02 nm, Epot= -5.19358e+05 Fmax= 1.43428e+04, atom= 11770
Step=  241, Dmax= 7.8e-03 nm, Epot= -5.19513e+05 Fmax= 4.20435e+03, atom= 11770
Step=  242, Dmax= 9.4e-03 nm, Epot= -5.19574e+05 Fmax= 7.75262e+03, atom= 11770
Step=  243, Dmax= 1.1e-02 nm, Epot= -5.19667e+05 Fmax= 7.18773e+03, atom= 10762
Step=  244, Dmax= 1.4e-02 nm, Epot= -5.19695e+05 Fmax= 1.08127e+04, atom= 10762
Step=  245, Dmax= 1.6e-02 nm, Epot= -5.19784e+05 Fmax= 1.06679e+04, atom= 10762
Step=  246, Dmax= 1.9e-02 nm, Epot= -5.19767e+05 Fmax= 1.52396e+04, atom= 10762
Step=  247, Dmax= 9.7e-03 nm, Epot= -5.19954e+05 Fmax= 2.10720e+03, atom= 10762
Step=  248, Dmax= 1.2e-02 nm, Epot= -5.20075e+05 Fmax= 1.33730e+04, atom= 10762
Step=  249, Dmax= 1.4e-02 nm, Epot= -5.20279e+05 Fmax= 5.14617e+03, atom= 10762
Step=  250, Dmax= 1.7e-02 nm, Epot= -5.20212e+05 Fmax= 1.69467e+04, atom= 10762
Step=  251, Dmax= 8.4e-03 nm, Epot= -5.20356e+05 Fmax= 6.01398e+03, atom= 10762
Step=  252, Dmax= 1.0e-02 nm, Epot= -5.20429e+05 Fmax= 7.40141e+03, atom= 10762
Step=  253, Dmax= 1.2e-02 nm, Epot= -5.20497e+05 Fmax= 8.65364e+03, atom= 10762
Step=  254, Dmax= 1.5e-02 nm, Epot= -5.20555e+05 Fmax= 1.06739e+04, atom= 10762
Step=  255, Dmax= 1.7e-02 nm, Epot= -5.20608e+05 Fmax= 1.23935e+04, atom= 10762
Step=  256, Dmax= 2.1e-02 nm, Epot= -5.20636e+05 Fmax= 1.54181e+04, atom= 10762
Step=  257, Dmax= 2.5e-02 nm, Epot= -5.20658e+05 Fmax= 1.76422e+04, atom= 10762
Step=  258, Dmax= 3.0e-02 nm, Epot= -5.20623e+05 Fmax= 2.22861e+04, atom= 10762
Step=  259, Dmax= 1.5e-02 nm, Epot= -5.20937e+05 Fmax= 1.95667e+03, atom= 10762
Step=  260, Dmax= 1.8e-02 nm, Epot= -5.21034e+05 Fmax= 2.23397e+04, atom= 10762
Step=  261, Dmax= 2.2e-02 nm, Epot= -5.21421e+05 Fmax= 6.52695e+03, atom= 10762
Step=  262, Dmax= 2.6e-02 nm, Epot= -5.21113e+05 Fmax= 2.73700e+04, atom= 10762
Step=  263, Dmax= 1.3e-02 nm, Epot= -5.21470e+05 Fmax= 1.06207e+04, atom= 10762
Step=  264, Dmax= 1.6e-02 nm, Epot= -5.21551e+05 Fmax= 1.01160e+04, atom= 10762
Step=  265, Dmax= 1.9e-02 nm, Epot= -5.21564e+05 Fmax= 1.46268e+04, atom= 10762
Step=  266, Dmax= 2.3e-02 nm, Epot= -5.21632e+05 Fmax= 1.51774e+04, atom= 10762
Step=  267, Dmax= 2.7e-02 nm, Epot= -5.21588e+05 Fmax= 2.02776e+04, atom= 10762
Step=  268, Dmax= 1.4e-02 nm, Epot= -5.21824e+05 Fmax= 2.89913e+03, atom= 10762
Step=  269, Dmax= 1.6e-02 nm, Epot= -5.21878e+05 Fmax= 1.89746e+04, atom= 10762
Step=  270, Dmax= 1.9e-02 nm, Epot= -5.22114e+05 Fmax= 7.19163e+03, atom= 10762
Step=  271, Dmax= 2.3e-02 nm, Epot= -5.21945e+05 Fmax= 2.44922e+04, atom= 10762
Step=  272, Dmax= 1.2e-02 nm, Epot= -5.22182e+05 Fmax= 8.33187e+03, atom= 10762
Step=  273, Dmax= 1.4e-02 nm, Epot= -5.22238e+05 Fmax= 1.02141e+04, atom= 10762
Step=  274, Dmax= 1.7e-02 nm, Epot= -5.22292e+05 Fmax= 1.21584e+04, atom= 10762
Step=  275, Dmax= 2.0e-02 nm, Epot= -5.22327e+05 Fmax= 1.44700e+04, atom= 10762
Step=  276, Dmax= 2.4e-02 nm, Epot= -5.22350e+05 Fmax= 1.77129e+04, atom= 10762
Step=  277, Dmax= 2.9e-02 nm, Epot= -5.22348e+05 Fmax= 2.03960e+04, atom= 10762
Step=  278, Dmax= 1.5e-02 nm, Epot= -5.22574e+05 Fmax= 1.92203e+03, atom= 10762
Step=  279, Dmax= 1.7e-02 nm, Epot= -5.22743e+05 Fmax= 2.13778e+04, atom= 10762
Step=  280, Dmax= 2.1e-02 nm, Epot= -5.23012e+05 Fmax= 6.90852e+03, atom= 10762
Step=  281, Dmax= 2.5e-02 nm, Epot= -5.22787e+05 Fmax= 2.74750e+04, atom= 10762
Step=  282, Dmax= 1.3e-02 nm, Epot= -5.23065e+05 Fmax= 9.93906e+03, atom= 10762
Step=  283, Dmax= 1.5e-02 nm, Epot= -5.23130e+05 Fmax= 1.00293e+04, atom= 10762
Step=  284, Dmax= 1.8e-02 nm, Epot= -5.23156e+05 Fmax= 1.41290e+04, atom= 10762
Step=  285, Dmax= 2.2e-02 nm, Epot= -5.23210e+05 Fmax= 1.45494e+04, atom= 10762
Step=  286, Dmax= 2.6e-02 nm, Epot= -5.23186e+05 Fmax= 2.01614e+04, atom= 10762
Step=  287, Dmax= 1.3e-02 nm, Epot= -5.23372e+05 Fmax= 2.41669e+03, atom= 10762
Step=  288, Dmax= 1.6e-02 nm, Epot= -5.23453e+05 Fmax= 1.83488e+04, atom= 10762
Step=  289, Dmax= 1.9e-02 nm, Epot= -5.23673e+05 Fmax= 6.38925e+03, atom= 10762
Step=  290, Dmax= 2.2e-02 nm, Epot= -5.23526e+05 Fmax= 2.29351e+04, atom= 10762
Step=  291, Dmax= 1.1e-02 nm, Epot= -5.23727e+05 Fmax= 8.52256e+03, atom= 10762
Step=  292, Dmax= 1.3e-02 nm, Epot= -5.23784e+05 Fmax= 9.43096e+03, atom= 10762
Step=  293, Dmax= 1.6e-02 nm, Epot= -5.23820e+05 Fmax= 1.20077e+04, atom= 10762
Step=  294, Dmax= 1.9e-02 nm, Epot= -5.23861e+05 Fmax= 1.38350e+04, atom= 10762
Step=  295, Dmax= 2.3e-02 nm, Epot= -5.23866e+05 Fmax= 1.69023e+04, atom= 10762
Step=  296, Dmax= 2.8e-02 nm, Epot= -5.23869e+05 Fmax= 2.02281e+04, atom= 10762
Step=  297, Dmax= 3.4e-02 nm, Epot= -5.23824e+05 Fmax= 2.36353e+04, atom= 10762
Step=  298, Dmax= 1.7e-02 nm, Epot= -5.24130e+05 Fmax= 2.47641e+03, atom= 10762
Step=  299, Dmax= 2.0e-02 nm, Epot= -5.24127e+05 Fmax= 2.45395e+04, atom= 10762
Step=  300, Dmax= 1.0e-02 nm, Epot= -5.24228e+05 Fmax= 1.06784e+04, atom= 10762
Step=  301, Dmax= 1.2e-02 nm, Epot= -5.24317e+05 Fmax= 5.44969e+03, atom= 10762
Step=  302, Dmax= 1.5e-02 nm, Epot= -5.24324e+05 Fmax= 1.40939e+04, atom= 10762
Step=  303, Dmax= 1.7e-02 nm, Epot= -5.24432e+05 Fmax= 9.11512e+03, atom= 10762
Step=  304, Dmax= 2.1e-02 nm, Epot= -5.24368e+05 Fmax= 1.89795e+04, atom= 10762
Step=  305, Dmax= 1.0e-02 nm, Epot= -5.24510e+05 Fmax= 4.63997e+03, atom= 10762
Step=  306, Dmax= 1.3e-02 nm, Epot= -5.24540e+05 Fmax= 1.18928e+04, atom= 10762
Step=  307, Dmax= 1.5e-02 nm, Epot= -5.24631e+05 Fmax= 8.00205e+03, atom= 10762
Step=  308, Dmax= 1.8e-02 nm, Epot= -5.24605e+05 Fmax= 1.57026e+04, atom= 10762
Step=  309, Dmax= 9.0e-03 nm, Epot= -5.24699e+05 Fmax= 4.06977e+03, atom= 10762
Step=  310, Dmax= 1.1e-02 nm, Epot= -5.24744e+05 Fmax= 1.04022e+04, atom= 10762
Step=  311, Dmax= 1.3e-02 nm, Epot= -5.24821e+05 Fmax= 6.93638e+03, atom= 10762
Step=  312, Dmax= 1.6e-02 nm, Epot= -5.24822e+05 Fmax= 1.39707e+04, atom= 10762
Step=  313, Dmax= 1.9e-02 nm, Epot= -5.24908e+05 Fmax= 1.09204e+04, atom= 10762
Step=  314, Dmax= 2.2e-02 nm, Epot= -5.24849e+05 Fmax= 1.91752e+04, atom= 10762
Step=  315, Dmax= 1.1e-02 nm, Epot= -5.25004e+05 Fmax= 3.81866e+03, atom= 10762
Step=  316, Dmax= 1.3e-02 nm, Epot= -5.25024e+05 Fmax= 1.39656e+04, atom= 10762
Step=  317, Dmax= 1.6e-02 nm, Epot= -5.25146e+05 Fmax= 7.36744e+03, atom= 10762
Step=  318, Dmax= 1.9e-02 nm, Epot= -5.25078e+05 Fmax= 1.80430e+04, atom= 10762
Step=  319, Dmax= 9.7e-03 nm, Epot= -5.25205e+05 Fmax= 5.57263e+03, atom= 10762
Step=  320, Dmax= 1.2e-02 nm, Epot= -5.25240e+05 Fmax= 9.94904e+03, atom= 10762
Step=  321, Dmax= 1.4e-02 nm, Epot= -5.25301e+05 Fmax= 8.63009e+03, atom= 10762
Step=  322, Dmax= 1.7e-02 nm, Epot= -5.25306e+05 Fmax= 1.37661e+04, atom= 10762
Step=  323, Dmax= 2.0e-02 nm, Epot= -5.25365e+05 Fmax= 1.28871e+04, atom= 10762
Step=  324, Dmax= 2.4e-02 nm, Epot= -5.25320e+05 Fmax= 1.93405e+04, atom= 10762
Step=  325, Dmax= 1.2e-02 nm, Epot= -5.25487e+05 Fmax= 2.88614e+03, atom= 10762
Step=  326, Dmax= 1.4e-02 nm, Epot= -5.25510e+05 Fmax= 1.62737e+04, atom= 10762
Step=  327, Dmax= 1.7e-02 nm, Epot= -5.25675e+05 Fmax= 6.61757e+03, atom= 10762
Step=  328, Dmax= 2.1e-02 nm, Epot= -5.25557e+05 Fmax= 2.05878e+04, atom= 10762
Step=  329, Dmax= 1.0e-02 nm, Epot= -5.25722e+05 Fmax= 7.23803e+03, atom= 10762
Step=  330, Dmax= 1.3e-02 nm, Epot= -5.25761e+05 Fmax= 9.40477e+03, atom= 10762
Step=  331, Dmax= 1.5e-02 nm, Epot= -5.25801e+05 Fmax= 1.04892e+04, atom= 10762
Step=  332, Dmax= 1.8e-02 nm, Epot= -5.25821e+05 Fmax= 1.34914e+04, atom= 10762
Step=  333, Dmax= 2.2e-02 nm, Epot= -5.25844e+05 Fmax= 1.50290e+04, atom= 10762
Step=  334, Dmax= 2.6e-02 nm, Epot= -5.25824e+05 Fmax= 1.94546e+04, atom= 10762
Step=  335, Dmax= 1.3e-02 nm, Epot= -5.26001e+05 Fmax= 1.85337e+03, atom= 10762
Step=  336, Dmax= 1.6e-02 nm, Epot= -5.26073e+05 Fmax= 1.89595e+04, atom= 10762
Step=  337, Dmax= 1.9e-02 nm, Epot= -5.26297e+05 Fmax= 5.70973e+03, atom= 10762
Step=  338, Dmax= 2.2e-02 nm, Epot= -5.26121e+05 Fmax= 2.33613e+04, atom= 10762
Step=  339, Dmax= 1.1e-02 nm, Epot= -5.26332e+05 Fmax= 9.08332e+03, atom= 10762
Step=  340, Dmax= 1.3e-02 nm, Epot= -5.26384e+05 Fmax= 8.75341e+03, atom= 10762
Step=  341, Dmax= 1.6e-02 nm, Epot= -5.26396e+05 Fmax= 1.25380e+04, atom= 10762
Step=  342, Dmax= 1.9e-02 nm, Epot= -5.26440e+05 Fmax= 1.31184e+04, atom= 10762
Step=  343, Dmax= 2.3e-02 nm, Epot= -5.26415e+05 Fmax= 1.73874e+04, atom= 10762
Step=  344, Dmax= 1.2e-02 nm, Epot= -5.26561e+05 Fmax= 2.46045e+03, atom= 10762
Step=  345, Dmax= 1.4e-02 nm, Epot= -5.26602e+05 Fmax= 1.62260e+04, atom= 10762
Step=  346, Dmax= 1.7e-02 nm, Epot= -5.26755e+05 Fmax= 6.22786e+03, atom= 10762
Step=  347, Dmax= 2.0e-02 nm, Epot= -5.26640e+05 Fmax= 2.09515e+04, atom= 10762
Step=  348, Dmax= 1.0e-02 nm, Epot= -5.26799e+05 Fmax= 7.09920e+03, atom= 10762
Step=  349, Dmax= 1.2e-02 nm, Epot= -5.26835e+05 Fmax= 8.83115e+03, atom= 10762
Step=  350, Dmax= 1.4e-02 nm, Epot= -5.26870e+05 Fmax= 1.03736e+04, atom= 10762
Step=  351, Dmax= 1.7e-02 nm, Epot= -5.26890e+05 Fmax= 1.24884e+04, atom= 10762
Step=  352, Dmax= 2.1e-02 nm, Epot= -5.26905e+05 Fmax= 1.51517e+04, atom= 10762
Step=  353, Dmax= 2.5e-02 nm, Epot= -5.26898e+05 Fmax= 1.75759e+04, atom= 10762
Step=  354, Dmax= 1.2e-02 nm, Epot= -5.27055e+05 Fmax= 1.70054e+03, atom= 10762
Step=  355, Dmax= 1.5e-02 nm, Epot= -5.27145e+05 Fmax= 1.81919e+04, atom= 10762
Step=  356, Dmax= 1.8e-02 nm, Epot= -5.27329e+05 Fmax= 5.99711e+03, atom= 10762
Step=  357, Dmax= 2.2e-02 nm, Epot= -5.27164e+05 Fmax= 2.34211e+04, atom= 10762
Step=  358, Dmax= 1.1e-02 nm, Epot= -5.27364e+05 Fmax= 8.41623e+03, atom= 10762
Step=  359, Dmax= 1.3e-02 nm, Epot= -5.27405e+05 Fmax= 8.68533e+03, atom= 10762
Step=  360, Dmax= 1.6e-02 nm, Epot= -5.27422e+05 Fmax= 1.19983e+04, atom= 10762
Step=  361, Dmax= 1.9e-02 nm, Epot= -5.27455e+05 Fmax= 1.25565e+04, atom= 10762
Step=  362, Dmax= 2.2e-02 nm, Epot= -5.27437e+05 Fmax= 1.71854e+04, atom= 10762
Step=  363, Dmax= 1.1e-02 nm, Epot= -5.27570e+05 Fmax= 1.96978e+03, atom= 10762
Step=  364, Dmax= 1.3e-02 nm, Epot= -5.27625e+05 Fmax= 1.58007e+04, atom= 10762
Step=  365, Dmax= 1.6e-02 nm, Epot= -5.27784e+05 Fmax= 5.33445e+03, atom= 10762
Step=  366, Dmax= 1.9e-02 nm, Epot= -5.27675e+05 Fmax= 1.96856e+04, atom= 10762
Step=  367, Dmax= 9.7e-03 nm, Epot= -5.27821e+05 Fmax= 7.42665e+03, atom= 10762
Step=  368, Dmax= 1.2e-02 nm, Epot= -5.27862e+05 Fmax= 7.92236e+03, atom= 10762
Step=  369, Dmax= 1.4e-02 nm, Epot= -5.27885e+05 Fmax= 1.04098e+04, atom= 10762
Step=  370, Dmax= 1.7e-02 nm, Epot= -5.27918e+05 Fmax= 1.16859e+04, atom= 10762
Step=  371, Dmax= 2.0e-02 nm, Epot= -5.27918e+05 Fmax= 1.45928e+04, atom= 10762
Step=  372, Dmax= 2.4e-02 nm, Epot= -5.27925e+05 Fmax= 1.71754e+04, atom= 10762
Step=  373, Dmax= 2.9e-02 nm, Epot= -5.27889e+05 Fmax= 2.03546e+04, atom= 10762
Step=  374, Dmax= 1.4e-02 nm, Epot= -5.28111e+05 Fmax= 2.22558e+03, atom= 10762
Step=  375, Dmax= 1.7e-02 nm, Epot= -5.28105e+05 Fmax= 2.07904e+04, atom= 10762
Step=  376, Dmax= 8.7e-03 nm, Epot= -5.28180e+05 Fmax= 9.01644e+03, atom= 10762
Step=  377, Dmax= 1.0e-02 nm, Epot= -5.28245e+05 Fmax= 4.77310e+03, atom= 10762
Step=  378, Dmax= 1.2e-02 nm, Epot= -5.28253e+05 Fmax= 1.18793e+04, atom= 10762
Step=  379, Dmax= 1.5e-02 nm, Epot= -5.28330e+05 Fmax= 7.93395e+03, atom= 10762
Step=  380, Dmax= 1.8e-02 nm, Epot= -5.28289e+05 Fmax= 1.60325e+04, atom= 10762
Step=  381, Dmax= 9.0e-03 nm, Epot= -5.28390e+05 Fmax= 3.80783e+03, atom= 10762
Step=  382, Dmax= 1.1e-02 nm, Epot= -5.28415e+05 Fmax= 1.03157e+04, atom= 10762
Step=  383, Dmax= 1.3e-02 nm, Epot= -5.28487e+05 Fmax= 6.65889e+03, atom= 10762
Step=  384, Dmax= 1.6e-02 nm, Epot= -5.28468e+05 Fmax= 1.35650e+04, atom= 10762
Step=  385, Dmax= 7.8e-03 nm, Epot= -5.28536e+05 Fmax= 3.64319e+03, atom= 10762
Step=  386, Dmax= 9.3e-03 nm, Epot= -5.28572e+05 Fmax= 8.68702e+03, atom= 10762
Step=  387, Dmax= 1.1e-02 nm, Epot= -5.28628e+05 Fmax= 6.09730e+03, atom= 10762
Step=  388, Dmax= 1.3e-02 nm, Epot= -5.28634e+05 Fmax= 1.17178e+04, atom= 10762
Step=  389, Dmax= 1.6e-02 nm, Epot= -5.28695e+05 Fmax= 9.49891e+03, atom= 10762
Step=  390, Dmax= 1.9e-02 nm, Epot= -5.28657e+05 Fmax= 1.61569e+04, atom= 10762
Step=  391, Dmax= 9.7e-03 nm, Epot= -5.28770e+05 Fmax= 3.06960e+03, atom= 10762
Step=  392, Dmax= 1.2e-02 nm, Epot= -5.28790e+05 Fmax= 1.21075e+04, atom= 10762
Step=  393, Dmax= 1.4e-02 nm, Epot= -5.28886e+05 Fmax= 6.07974e+03, atom= 10762
Step=  394, Dmax= 1.7e-02 nm, Epot= -5.28834e+05 Fmax= 1.55772e+04, atom= 10762
Step=  395, Dmax= 8.3e-03 nm, Epot= -5.28929e+05 Fmax= 4.95013e+03, atom= 10762
Step=  396, Dmax= 1.0e-02 nm, Epot= -5.28958e+05 Fmax= 8.26840e+03, atom= 10762
Step=  397, Dmax= 1.2e-02 nm, Epot= -5.29002e+05 Fmax= 7.55849e+03, atom= 10762
Step=  398, Dmax= 1.4e-02 nm, Epot= -5.29010e+05 Fmax= 1.15122e+04, atom= 10762
Step=  399, Dmax= 1.7e-02 nm, Epot= -5.29050e+05 Fmax= 1.11898e+04, atom= 10762
Step=  400, Dmax= 2.1e-02 nm, Epot= -5.29022e+05 Fmax= 1.62644e+04, atom= 10762
Step=  401, Dmax= 1.0e-02 nm, Epot= -5.29146e+05 Fmax= 2.25944e+03, atom= 10762
Step=  402, Dmax= 1.2e-02 nm, Epot= -5.29169e+05 Fmax= 1.41000e+04, atom= 10762
Step=  403, Dmax= 1.5e-02 nm, Epot= -5.29300e+05 Fmax= 5.41301e+03, atom= 10762
Step=  404, Dmax= 1.8e-02 nm, Epot= -5.29204e+05 Fmax= 1.77748e+04, atom= 10762
Step=  405, Dmax= 9.0e-03 nm, Epot= -5.29335e+05 Fmax= 6.38540e+03, atom= 10762
Step=  406, Dmax= 1.1e-02 nm, Epot= -5.29366e+05 Fmax= 7.78177e+03, atom= 10762
Step=  407, Dmax= 1.3e-02 nm, Epot= -5.29393e+05 Fmax= 9.15616e+03, atom= 10762
Step=  408, Dmax= 1.5e-02 nm, Epot= -5.29411e+05 Fmax= 1.12538e+04, atom= 10762
Step=  409, Dmax= 1.9e-02 nm, Epot= -5.29422e+05 Fmax= 1.30321e+04, atom= 10762
Step=  410, Dmax= 2.2e-02 nm, Epot= -5.29410e+05 Fmax= 1.63274e+04, atom= 10762
Step=  411, Dmax= 1.1e-02 nm, Epot= -5.29547e+05 Fmax= 1.37562e+03, atom= 10762
Step=  412, Dmax= 1.3e-02 nm, Epot= -5.29611e+05 Fmax= 1.64418e+04, atom= 10762
Step=  413, Dmax= 1.6e-02 nm, Epot= -5.29798e+05 Fmax= 4.61944e+03, atom= 10762
Step=  414, Dmax= 1.9e-02 nm, Epot= -5.29638e+05 Fmax= 2.01883e+04, atom= 10762
Step=  415, Dmax= 9.6e-03 nm, Epot= -5.29820e+05 Fmax= 7.95976e+03, atom= 10762
Step=  416, Dmax= 1.2e-02 nm, Epot= -5.29863e+05 Fmax= 7.21749e+03, atom= 10762
Step=  417, Dmax= 1.4e-02 nm, Epot= -5.29862e+05 Fmax= 1.09119e+04, atom= 10762
Step=  418, Dmax= 6.9e-03 nm, Epot= -5.29918e+05 Fmax= 1.93055e+03, atom= 10762
Step=  419, Dmax= 8.3e-03 nm, Epot= -5.29968e+05 Fmax= 9.06657e+03, atom= 10762
Step=  420, Dmax= 1.0e-02 nm, Epot= -5.30037e+05 Fmax= 4.12301e+03, atom= 10762
Step=  421, Dmax= 1.2e-02 nm, Epot= -5.30025e+05 Fmax= 1.17751e+04, atom= 10762
Step=  422, Dmax= 6.0e-03 nm, Epot= -5.30073e+05 Fmax= 3.74030e+03, atom= 10762
Step=  423, Dmax= 7.2e-03 nm, Epot= -5.30105e+05 Fmax= 5.69626e+03, atom= 10762
Step=  424, Dmax= 8.6e-03 nm, Epot= -5.30141e+05 Fmax= 5.64164e+03, atom= 10762
Step=  425, Dmax= 1.0e-02 nm, Epot= -5.30161e+05 Fmax= 7.91141e+03, atom= 10762
Step=  426, Dmax= 1.2e-02 nm, Epot= -5.30192e+05 Fmax= 8.41888e+03, atom= 10762
Step=  427, Dmax= 1.5e-02 nm, Epot= -5.30194e+05 Fmax= 1.10351e+04, atom= 10762
Step=  428, Dmax= 1.8e-02 nm, Epot= -5.30210e+05 Fmax= 1.24665e+04, atom= 10762
Step=  429, Dmax= 2.1e-02 nm, Epot= -5.30178e+05 Fmax= 1.53993e+04, atom= 10762
Step=  430, Dmax= 1.1e-02 nm, Epot= -5.30339e+05 Fmax= 1.81017e+03, atom= 10762
Step=  431, Dmax= 1.3e-02 nm, Epot= -5.30338e+05 Fmax= 1.52136e+04, atom= 10762
Step=  432, Dmax= 6.4e-03 nm, Epot= -5.30392e+05 Fmax= 6.55913e+03, atom= 10762
Step=  433, Dmax= 7.7e-03 nm, Epot= -5.30441e+05 Fmax= 3.62067e+03, atom= 10762
Step=  434, Dmax= 9.3e-03 nm, Epot= -5.30453e+05 Fmax= 8.64978e+03, atom= 10762
Step=  435, Dmax= 1.1e-02 nm, Epot= -5.30511e+05 Fmax= 5.97910e+03, atom= 10762
Step=  436, Dmax= 1.3e-02 nm, Epot= -5.30484e+05 Fmax= 1.16956e+04, atom= 10762
Step=  437, Dmax= 6.7e-03 nm, Epot= -5.30559e+05 Fmax= 2.72416e+03, atom= 10762
Step=  438, Dmax= 8.0e-03 nm, Epot= -5.30582e+05 Fmax= 7.72967e+03, atom= 10762
Step=  439, Dmax= 9.6e-03 nm, Epot= -5.30641e+05 Fmax= 4.84009e+03, atom= 10762
Step=  440, Dmax= 1.2e-02 nm, Epot= -5.30623e+05 Fmax= 1.01500e+04, atom= 10762
Step=  441, Dmax= 5.8e-03 nm, Epot= -5.30681e+05 Fmax= 2.75765e+03, atom= 10762
Step=  442, Dmax= 6.9e-03 nm, Epot= -5.30710e+05 Fmax= 6.35679e+03, atom= 10762
Step=  443, Dmax= 8.3e-03 nm, Epot= -5.30756e+05 Fmax= 4.55567e+03, atom= 10762
Step=  444, Dmax= 1.0e-02 nm, Epot= -5.30757e+05 Fmax= 8.59841e+03, atom= 10762
Step=  445, Dmax= 1.2e-02 nm, Epot= -5.30807e+05 Fmax= 7.07908e+03, atom= 10762
Step=  446, Dmax= 1.4e-02 nm, Epot= -5.30768e+05 Fmax= 1.18668e+04, atom= 10762
Step=  447, Dmax= 7.2e-03 nm, Epot= -5.30874e+05 Fmax= 2.25091e+03, atom= 10762
Step=  448, Dmax= 8.6e-03 nm, Epot= -5.30880e+05 Fmax= 8.97435e+03, atom= 10762
Step=  449, Dmax= 1.0e-02 nm, Epot= -5.30969e+05 Fmax= 4.50855e+03, atom= 10762
Step=  450, Dmax= 1.2e-02 nm, Epot= -5.30899e+05 Fmax= 1.15605e+04, atom= 10762
Step=  451, Dmax= 6.2e-03 nm, Epot= -5.31007e+05 Fmax= 3.63256e+03, atom= 10762
Step=  452, Dmax= 7.4e-03 nm, Epot= -5.31025e+05 Fmax= 6.14755e+03, atom= 10762
Step=  453, Dmax= 8.9e-03 nm, Epot= -5.31063e+05 Fmax= 5.54755e+03, atom= 10762
Step=  454, Dmax= 1.1e-02 nm, Epot= -5.31054e+05 Fmax= 8.55330e+03, atom= 10762
Step=  455, Dmax= 5.4e-03 nm, Epot= -5.31120e+05 Fmax= 1.43006e+03, atom= 10762
Step=  456, Dmax= 6.4e-03 nm, Epot= -5.31156e+05 Fmax= 6.96566e+03, atom= 10762
Step=  457, Dmax= 7.7e-03 nm, Epot= -5.31234e+05 Fmax= 3.10990e+03, atom= 10762
Step=  458, Dmax= 9.3e-03 nm, Epot= -5.31195e+05 Fmax= 8.91329e+03, atom= 10762
Step=  459, Dmax= 4.6e-03 nm, Epot= -5.31268e+05 Fmax= 2.95561e+03, atom= 10762
Step=  460, Dmax= 5.6e-03 nm, Epot= -5.31294e+05 Fmax= 4.47649e+03, atom= 5974
Step=  461, Dmax= 6.7e-03 nm, Epot= -5.31328e+05 Fmax= 4.42541e+03, atom= 5974
Step=  462, Dmax= 8.0e-03 nm, Epot= -5.31343e+05 Fmax= 6.28852e+03, atom= 5974
Step=  463, Dmax= 9.6e-03 nm, Epot= -5.31374e+05 Fmax= 6.51598e+03, atom= 5974
Step=  464, Dmax= 1.2e-02 nm, Epot= -5.31369e+05 Fmax= 8.91642e+03, atom= 5974
Step=  465, Dmax= 5.8e-03 nm, Epot= -5.31448e+05 Fmax= 1.18387e+03, atom= 12308
Step=  466, Dmax= 6.9e-03 nm, Epot= -5.31511e+05 Fmax= 7.52836e+03, atom= 5974
Step=  467, Dmax= 8.3e-03 nm, Epot= -5.31589e+05 Fmax= 3.50595e+03, atom= 5974
Step=  468, Dmax= 1.0e-02 nm, Epot= -5.31561e+05 Fmax= 9.65402e+03, atom= 5974
Step=  469, Dmax= 5.0e-03 nm, Epot= -5.31624e+05 Fmax= 3.14397e+03, atom= 5974
Step=  470, Dmax= 6.0e-03 nm, Epot= -5.31652e+05 Fmax= 4.85327e+03, atom= 5974
Step=  471, Dmax= 7.2e-03 nm, Epot= -5.31687e+05 Fmax= 4.71583e+03, atom= 5974
Step=  472, Dmax= 8.6e-03 nm, Epot= -5.31704e+05 Fmax= 6.80471e+03, atom= 5974
Step=  473, Dmax= 1.0e-02 nm, Epot= -5.31735e+05 Fmax= 6.95948e+03, atom= 5974
Step=  474, Dmax= 1.2e-02 nm, Epot= -5.31734e+05 Fmax= 9.63382e+03, atom= 5974
Step=  475, Dmax= 6.2e-03 nm, Epot= -5.31802e+05 Fmax= 1.23638e+03, atom= 5974
Step=  476, Dmax= 7.4e-03 nm, Epot= -5.31865e+05 Fmax= 8.63324e+03, atom= 5974
Step=  477, Dmax= 8.9e-03 nm, Epot= -5.31950e+05 Fmax= 3.20537e+03, atom= 5974
Step=  478, Dmax= 1.1e-02 nm, Epot= -5.31923e+05 Fmax= 1.09079e+04, atom= 5974
Step=  479, Dmax= 5.4e-03 nm, Epot= -5.31982e+05 Fmax= 3.93234e+03, atom= 5974
Step=  480, Dmax= 6.4e-03 nm, Epot= -5.32012e+05 Fmax= 4.65297e+03, atom= 5974
Step=  481, Dmax= 7.7e-03 nm, Epot= -5.32040e+05 Fmax= 5.61756e+03, atom= 5974
Step=  482, Dmax= 9.2e-03 nm, Epot= -5.32065e+05 Fmax= 6.75014e+03, atom= 5974
Step=  483, Dmax= 1.1e-02 nm, Epot= -5.32084e+05 Fmax= 8.02089e+03, atom= 5974
Step=  484, Dmax= 1.3e-02 nm, Epot= -5.32097e+05 Fmax= 9.79174e+03, atom= 5974
Step=  485, Dmax= 1.6e-02 nm, Epot= -5.32101e+05 Fmax= 1.14297e+04, atom= 5974
Step=  486, Dmax= 1.9e-02 nm, Epot= -5.32086e+05 Fmax= 1.42141e+04, atom= 5974
Step=  487, Dmax= 9.6e-03 nm, Epot= -5.32227e+05 Fmax= 1.15408e+03, atom= 5974
Step=  488, Dmax= 1.2e-02 nm, Epot= -5.32276e+05 Fmax= 1.41424e+04, atom= 5974
Step=  489, Dmax= 1.4e-02 nm, Epot= -5.32448e+05 Fmax= 4.14004e+03, atom= 5974
Step=  490, Dmax= 1.7e-02 nm, Epot= -5.32299e+05 Fmax= 1.73833e+04, atom= 5974
Step=  491, Dmax= 8.3e-03 nm, Epot= -5.32466e+05 Fmax= 6.83402e+03, atom= 5974
Step=  492, Dmax= 9.9e-03 nm, Epot= -5.32502e+05 Fmax= 6.44809e+03, atom= 5974
Step=  493, Dmax= 1.2e-02 nm, Epot= -5.32504e+05 Fmax= 9.38070e+03, atom= 5974
Step=  494, Dmax= 1.4e-02 nm, Epot= -5.32534e+05 Fmax= 9.73171e+03, atom= 5974
Step=  495, Dmax= 1.7e-02 nm, Epot= -5.32510e+05 Fmax= 1.30138e+04, atom= 5974
Step=  496, Dmax= 8.6e-03 nm, Epot= -5.32620e+05 Fmax= 1.85337e+03, atom= 5974
Step=  497, Dmax= 1.0e-02 nm, Epot= -5.32637e+05 Fmax= 1.20236e+04, atom= 5974
Step=  498, Dmax= 1.2e-02 nm, Epot= -5.32743e+05 Fmax= 4.62917e+03, atom= 5974
Step=  499, Dmax= 1.5e-02 nm, Epot= -5.32662e+05 Fmax= 1.54819e+04, atom= 5974
Step=  500, Dmax= 7.4e-03 nm, Epot= -5.32771e+05 Fmax= 5.28314e+03, atom= 5974
Step=  501, Dmax= 8.9e-03 nm, Epot= -5.32794e+05 Fmax= 6.57596e+03, atom= 5974
Step=  502, Dmax= 1.1e-02 nm, Epot= -5.32817e+05 Fmax= 7.70884e+03, atom= 5974
Step=  503, Dmax= 1.3e-02 nm, Epot= -5.32830e+05 Fmax= 9.33957e+03, atom= 5974
Step=  504, Dmax= 1.5e-02 nm, Epot= -5.32838e+05 Fmax= 1.12349e+04, atom= 5974
Step=  505, Dmax= 1.8e-02 nm, Epot= -5.32833e+05 Fmax= 1.32431e+04, atom= 5974
Step=  506, Dmax= 9.2e-03 nm, Epot= -5.32937e+05 Fmax= 1.25538e+03, atom= 5974
Step=  507, Dmax= 1.1e-02 nm, Epot= -5.32993e+05 Fmax= 1.36077e+04, atom= 5974
Step=  508, Dmax= 1.3e-02 nm, Epot= -5.33113e+05 Fmax= 4.33816e+03, atom= 5974
Step=  509, Dmax= 1.6e-02 nm, Epot= -5.33010e+05 Fmax= 1.73896e+04, atom= 5974
Step=  510, Dmax= 8.0e-03 nm, Epot= -5.33133e+05 Fmax= 6.36839e+03, atom= 5974
Step=  511, Dmax= 9.6e-03 nm, Epot= -5.33159e+05 Fmax= 6.39463e+03, atom= 5974
Step=  512, Dmax= 1.1e-02 nm, Epot= -5.33168e+05 Fmax= 8.99897e+03, atom= 5974
Step=  513, Dmax= 1.4e-02 nm, Epot= -5.33189e+05 Fmax= 9.35413e+03, atom= 5974
Step=  514, Dmax= 1.7e-02 nm, Epot= -5.33177e+05 Fmax= 1.28055e+04, atom= 5974
Step=  515, Dmax= 8.3e-03 nm, Epot= -5.33258e+05 Fmax= 1.54308e+03, atom= 5974
Step=  516, Dmax= 9.9e-03 nm, Epot= -5.33286e+05 Fmax= 1.16194e+04, atom= 5974
Step=  517, Dmax= 1.2e-02 nm, Epot= -5.33378e+05 Fmax= 4.14567e+03, atom= 5974
Step=  518, Dmax= 1.4e-02 nm, Epot= -5.33312e+05 Fmax= 1.45947e+04, atom= 5974
Step=  519, Dmax= 7.1e-03 nm, Epot= -5.33400e+05 Fmax= 5.37555e+03, atom= 5974
Step=  520, Dmax= 8.6e-03 nm, Epot= -5.33423e+05 Fmax= 6.08367e+03, atom= 5974
Step=  521, Dmax= 1.0e-02 nm, Epot= -5.33438e+05 Fmax= 7.61169e+03, atom= 5974
Step=  522, Dmax= 1.2e-02 nm, Epot= -5.33454e+05 Fmax= 8.89375e+03, atom= 5974
Step=  523, Dmax= 1.5e-02 nm, Epot= -5.33458e+05 Fmax= 1.07864e+04, atom= 5974
Step=  524, Dmax= 1.8e-02 nm, Epot= -5.33458e+05 Fmax= 1.29800e+04, atom= 5974
Step=  525, Dmax= 2.1e-02 nm, Epot= -5.33441e+05 Fmax= 1.52520e+04, atom= 5974
Step=  526, Dmax= 1.1e-02 nm, Epot= -5.33571e+05 Fmax= 1.47659e+03, atom= 5974
Step=  527, Dmax= 1.3e-02 nm, Epot= -5.33582e+05 Fmax= 1.57019e+04, atom= 5974
Step=  528, Dmax= 1.5e-02 nm, Epot= -5.33721e+05 Fmax= 5.06595e+03, atom= 5974
Step=  529, Dmax= 1.8e-02 nm, Epot= -5.33574e+05 Fmax= 2.00941e+04, atom= 5974
Step=  530, Dmax= 9.2e-03 nm, Epot= -5.33737e+05 Fmax= 7.30602e+03, atom= 5974
Step=  531, Dmax= 1.1e-02 nm, Epot= -5.33760e+05 Fmax= 7.43188e+03, atom= 5974
Step=  532, Dmax= 1.3e-02 nm, Epot= -5.33763e+05 Fmax= 1.03535e+04, atom= 5974
Step=  533, Dmax= 1.6e-02 nm, Epot= -5.33781e+05 Fmax= 1.08289e+04, atom= 5974
Step=  534, Dmax= 1.9e-02 nm, Epot= -5.33758e+05 Fmax= 1.47694e+04, atom= 5974
Step=  535, Dmax= 9.6e-03 nm, Epot= -5.33862e+05 Fmax= 1.72545e+03, atom= 5974
Step=  536, Dmax= 1.1e-02 nm, Epot= -5.33870e+05 Fmax= 1.34710e+04, atom= 5974
Step=  537, Dmax= 1.4e-02 nm, Epot= -5.33982e+05 Fmax= 4.71268e+03, atom= 5974
Step=  538, Dmax= 1.7e-02 nm, Epot= -5.33884e+05 Fmax= 1.68545e+04, atom= 5974
Step=  539, Dmax= 8.3e-03 nm, Epot= -5.34002e+05 Fmax= 6.27799e+03, atom= 5974
Step=  540, Dmax= 9.9e-03 nm, Epot= -5.34024e+05 Fmax= 6.95692e+03, atom= 5974
Step=  541, Dmax= 1.2e-02 nm, Epot= -5.34034e+05 Fmax= 8.84866e+03, atom= 5974
Step=  542, Dmax= 1.4e-02 nm, Epot= -5.34049e+05 Fmax= 1.02128e+04, atom= 5974
Step=  543, Dmax= 1.7e-02 nm, Epot= -5.34044e+05 Fmax= 1.24869e+04, atom= 5974
Step=  544, Dmax= 8.6e-03 nm, Epot= -5.34121e+05 Fmax= 1.35372e+03, atom= 5974
Step=  545, Dmax= 1.0e-02 nm, Epot= -5.34166e+05 Fmax= 1.24211e+04, atom= 5974
Step=  546, Dmax= 1.2e-02 nm, Epot= -5.34257e+05 Fmax= 4.19818e+03, atom= 5974
Step=  547, Dmax= 1.5e-02 nm, Epot= -5.34190e+05 Fmax= 1.58831e+04, atom= 5974
Step=  548, Dmax= 7.4e-03 nm, Epot= -5.34279e+05 Fmax= 5.70175e+03, atom= 5974
Step=  549, Dmax= 8.9e-03 nm, Epot= -5.34302e+05 Fmax= 6.13183e+03, atom= 5974
Step=  550, Dmax= 1.1e-02 nm, Epot= -5.34317e+05 Fmax= 8.11862e+03, atom= 5974
Step=  551, Dmax= 1.3e-02 nm, Epot= -5.34335e+05 Fmax= 8.89517e+03, atom= 5974
Step=  552, Dmax= 1.5e-02 nm, Epot= -5.34336e+05 Fmax= 1.16267e+04, atom= 5974
Step=  553, Dmax= 1.8e-02 nm, Epot= -5.34342e+05 Fmax= 1.27981e+04, atom= 5974
Step=  554, Dmax= 2.2e-02 nm, Epot= -5.34313e+05 Fmax= 1.67381e+04, atom= 5974
Step=  555, Dmax= 1.1e-02 nm, Epot= -5.34449e+05 Fmax= 1.64422e+03, atom= 5974
Step=  556, Dmax= 1.3e-02 nm, Epot= -5.34439e+05 Fmax= 1.59432e+04, atom= 5974
Step=  557, Dmax= 6.6e-03 nm, Epot= -5.34489e+05 Fmax= 7.25240e+03, atom= 5974
Step=  558, Dmax= 8.0e-03 nm, Epot= -5.34531e+05 Fmax= 3.30790e+03, atom= 5974
Step=  559, Dmax= 9.5e-03 nm, Epot= -5.34537e+05 Fmax= 9.30949e+03, atom= 5974
Step=  560, Dmax= 1.1e-02 nm, Epot= -5.34589e+05 Fmax= 5.88695e+03, atom= 5974
Step=  561, Dmax= 1.4e-02 nm, Epot= -5.34562e+05 Fmax= 1.22531e+04, atom= 5974
Step=  562, Dmax= 6.9e-03 nm, Epot= -5.34622e+05 Fmax= 3.32180e+03, atom= 5974
Step=  563, Dmax= 8.2e-03 nm, Epot= -5.34638e+05 Fmax= 7.71509e+03, atom= 5974
Step=  564, Dmax= 9.9e-03 nm, Epot= -5.34676e+05 Fmax= 5.51921e+03, atom= 5974
Step=  565, Dmax= 1.2e-02 nm, Epot= -5.34671e+05 Fmax= 1.04086e+04, atom= 5974
Step=  566, Dmax= 5.9e-03 nm, Epot= -5.34708e+05 Fmax= 2.34802e+03, atom= 5974
Step=  567, Dmax= 7.1e-03 nm, Epot= -5.34735e+05 Fmax= 7.12629e+03, atom= 5974
Step=  568, Dmax= 8.5e-03 nm, Epot= -5.34774e+05 Fmax= 4.22733e+03, atom= 5974
Step=  569, Dmax= 1.0e-02 nm, Epot= -5.34777e+05 Fmax= 9.36089e+03, atom= 5974
Step=  570, Dmax= 1.2e-02 nm, Epot= -5.34822e+05 Fmax= 6.99513e+03, atom= 5974
Step=  571, Dmax= 1.5e-02 nm, Epot= -5.34796e+05 Fmax= 1.25190e+04, atom= 5974
Step=  572, Dmax= 7.4e-03 nm, Epot= -5.34862e+05 Fmax= 2.92396e+03, atom= 5974
Step=  573, Dmax= 8.9e-03 nm, Epot= -5.34876e+05 Fmax= 8.95003e+03, atom= 5974
Step=  574, Dmax= 1.1e-02 nm, Epot= -5.34924e+05 Fmax= 5.30170e+03, atom= 5974
Step=  575, Dmax= 1.3e-02 nm, Epot= -5.34905e+05 Fmax= 1.18544e+04, atom= 5974
Step=  576, Dmax= 6.4e-03 nm, Epot= -5.34955e+05 Fmax= 3.16466e+03, atom= 5974
Step=  577, Dmax= 7.7e-03 nm, Epot= -5.34974e+05 Fmax= 7.01996e+03, atom= 5974
Step=  578, Dmax= 9.2e-03 nm, Epot= -5.35009e+05 Fmax= 5.19653e+03, atom= 5974
Step=  579, Dmax= 1.1e-02 nm, Epot= -5.35010e+05 Fmax= 9.42163e+03, atom= 5974
Step=  580, Dmax= 1.3e-02 nm, Epot= -5.35048e+05 Fmax= 8.18006e+03, atom= 5974
Step=  581, Dmax= 1.6e-02 nm, Epot= -5.35024e+05 Fmax= 1.28080e+04, atom= 5974
Step=  582, Dmax= 7.9e-03 nm, Epot= -5.35097e+05 Fmax= 2.50279e+03, atom= 5974
Step=  583, Dmax= 9.5e-03 nm, Epot= -5.35109e+05 Fmax= 1.02667e+04, atom= 5974
Step=  584, Dmax= 1.1e-02 nm, Epot= -5.35170e+05 Fmax= 5.07996e+03, atom= 5974
Step=  585, Dmax= 1.4e-02 nm, Epot= -5.35135e+05 Fmax= 1.34031e+04, atom= 5974
Step=  586, Dmax= 6.9e-03 nm, Epot= -5.35199e+05 Fmax= 4.03289e+03, atom= 5974
Step=  587, Dmax= 8.2e-03 nm, Epot= -5.35216e+05 Fmax= 6.91777e+03, atom= 5974
Step=  588, Dmax= 9.9e-03 nm, Epot= -5.35245e+05 Fmax= 6.22942e+03, atom= 5974
Step=  589, Dmax= 1.2e-02 nm, Epot= -5.35248e+05 Fmax= 9.49572e+03, atom= 5974
Step=  590, Dmax= 1.4e-02 nm, Epot= -5.35275e+05 Fmax= 9.44681e+03, atom= 5974
Step=  591, Dmax= 1.7e-02 nm, Epot= -5.35256e+05 Fmax= 1.31252e+04, atom= 5974
Step=  592, Dmax= 8.5e-03 nm, Epot= -5.35336e+05 Fmax= 2.05941e+03, atom= 5974
Step=  593, Dmax= 1.0e-02 nm, Epot= -5.35348e+05 Fmax= 1.16626e+04, atom= 5974
Step=  594, Dmax= 1.2e-02 nm, Epot= -5.35425e+05 Fmax= 4.86408e+03, atom= 5974
Step=  595, Dmax= 1.5e-02 nm, Epot= -5.35368e+05 Fmax= 1.50565e+04, atom= 5974
Step=  596, Dmax= 7.4e-03 nm, Epot= -5.35450e+05 Fmax= 4.94939e+03, atom= 5974
Step=  597, Dmax= 8.8e-03 nm, Epot= -5.35466e+05 Fmax= 6.82691e+03, atom= 5974
Step=  598, Dmax= 1.1e-02 nm, Epot= -5.35488e+05 Fmax= 7.32359e+03, atom= 5974
Step=  599, Dmax= 1.3e-02 nm, Epot= -5.35493e+05 Fmax= 9.59263e+03, atom= 5974
Step=  600, Dmax= 1.5e-02 nm, Epot= -5.35507e+05 Fmax= 1.07945e+04, atom= 5974
Step=  601, Dmax= 1.8e-02 nm, Epot= -5.35494e+05 Fmax= 1.34805e+04, atom= 5974
Step=  602, Dmax= 9.2e-03 nm, Epot= -5.35582e+05 Fmax= 1.60069e+03, atom= 5974
Step=  603, Dmax= 1.1e-02 nm, Epot= -5.35599e+05 Fmax= 1.31158e+04, atom= 5974
Step=  604, Dmax= 1.3e-02 nm, Epot= -5.35692e+05 Fmax= 4.68342e+03, atom= 5974
Step=  605, Dmax= 1.6e-02 nm, Epot= -5.35607e+05 Fmax= 1.68018e+04, atom= 5974
Step=  606, Dmax= 7.9e-03 nm, Epot= -5.35711e+05 Fmax= 5.89341e+03, atom= 5974
Step=  607, Dmax= 9.5e-03 nm, Epot= -5.35728e+05 Fmax= 6.77155e+03, atom= 5974
Step=  608, Dmax= 1.1e-02 nm, Epot= -5.35740e+05 Fmax= 8.46320e+03, atom= 5974
Step=  609, Dmax= 1.4e-02 nm, Epot= -5.35750e+05 Fmax= 9.73369e+03, atom= 5974
Step=  610, Dmax= 1.6e-02 nm, Epot= -5.35748e+05 Fmax= 1.22092e+04, atom= 5974
Step=  611, Dmax= 8.2e-03 nm, Epot= -5.35814e+05 Fmax= 1.05062e+03, atom= 5974
Step=  612, Dmax= 9.9e-03 nm, Epot= -5.35868e+05 Fmax= 1.21416e+04, atom= 5974
Step=  613, Dmax= 1.2e-02 nm, Epot= -5.35957e+05 Fmax= 3.48783e+03, atom= 5974
Step=  614, Dmax= 1.4e-02 nm, Epot= -5.35895e+05 Fmax= 1.50407e+04, atom= 5974
Step=  615, Dmax= 7.1e-03 nm, Epot= -5.35974e+05 Fmax= 5.94028e+03, atom= 5974
Step=  616, Dmax= 8.5e-03 nm, Epot= -5.35998e+05 Fmax= 5.40187e+03, atom= 5974
Step=  617, Dmax= 1.0e-02 nm, Epot= -5.36003e+05 Fmax= 8.17379e+03, atom= 5974
Step=  618, Dmax= 1.2e-02 nm, Epot= -5.36026e+05 Fmax= 8.15940e+03, atom= 5974
Step=  619, Dmax= 1.5e-02 nm, Epot= -5.36016e+05 Fmax= 1.13386e+04, atom= 5974
Step=  620, Dmax= 7.4e-03 nm, Epot= -5.36073e+05 Fmax= 1.75378e+03, atom= 5974
Step=  621, Dmax= 8.8e-03 nm, Epot= -5.36092e+05 Fmax= 1.00410e+04, atom= 5974
Step=  622, Dmax= 1.1e-02 nm, Epot= -5.36151e+05 Fmax= 4.19965e+03, atom= 5974
Step=  623, Dmax= 1.3e-02 nm, Epot= -5.36116e+05 Fmax= 1.29275e+04, atom= 5974
Step=  624, Dmax= 6.4e-03 nm, Epot= -5.36172e+05 Fmax= 4.25291e+03, atom= 5974
Step=  625, Dmax= 7.6e-03 nm, Epot= -5.36188e+05 Fmax= 5.91435e+03, atom= 5974
Step=  626, Dmax= 9.2e-03 nm, Epot= -5.36208e+05 Fmax= 6.27562e+03, atom= 5974
Step=  627, Dmax= 1.1e-02 nm, Epot= -5.36216e+05 Fmax= 8.32790e+03, atom= 5974
Step=  628, Dmax= 1.3e-02 nm, Epot= -5.36231e+05 Fmax= 9.23861e+03, atom= 5974
Step=  629, Dmax= 1.6e-02 nm, Epot= -5.36224e+05 Fmax= 1.17237e+04, atom= 5974
Step=  630, Dmax= 7.9e-03 nm, Epot= -5.36287e+05 Fmax= 1.43559e+03, atom= 5974
Step=  631, Dmax= 9.5e-03 nm, Epot= -5.36316e+05 Fmax= 1.12038e+04, atom= 5974
Step=  632, Dmax= 1.1e-02 nm, Epot= -5.36387e+05 Fmax= 4.12182e+03, atom= 5974
Step=  633, Dmax= 1.4e-02 nm, Epot= -5.36336e+05 Fmax= 1.43331e+04, atom= 5974
Step=  634, Dmax= 6.8e-03 nm, Epot= -5.36406e+05 Fmax= 4.97879e+03, atom= 5974
Step=  635, Dmax= 8.2e-03 nm, Epot= -5.36423e+05 Fmax= 5.94998e+03, atom= 5974
Step=  636, Dmax= 9.8e-03 nm, Epot= -5.36439e+05 Fmax= 7.16526e+03, atom= 5974
Step=  637, Dmax= 1.2e-02 nm, Epot= -5.36450e+05 Fmax= 8.53575e+03, atom= 5974
Step=  638, Dmax= 1.4e-02 nm, Epot= -5.36456e+05 Fmax= 1.03606e+04, atom= 5974
Step=  639, Dmax= 1.7e-02 nm, Epot= -5.36454e+05 Fmax= 1.21727e+04, atom= 5974
Step=  640, Dmax= 8.5e-03 nm, Epot= -5.36524e+05 Fmax= 1.13190e+03, atom= 5974
Step=  641, Dmax= 1.0e-02 nm, Epot= -5.36573e+05 Fmax= 1.23803e+04, atom= 5974
Step=  642, Dmax= 1.2e-02 nm, Epot= -5.36658e+05 Fmax= 4.11330e+03, atom= 5974
Step=  643, Dmax= 1.5e-02 nm, Epot= -5.36588e+05 Fmax= 1.57814e+04, atom= 5974
Step=  644, Dmax= 7.4e-03 nm, Epot= -5.36675e+05 Fmax= 5.69304e+03, atom= 5974
Step=  645, Dmax= 8.8e-03 nm, Epot= -5.36694e+05 Fmax= 6.05350e+03, atom= 5974
Step=  646, Dmax= 1.1e-02 nm, Epot= -5.36705e+05 Fmax= 8.05706e+03, atom= 5974
Step=  647, Dmax= 1.3e-02 nm, Epot= -5.36719e+05 Fmax= 8.82146e+03, atom= 5974
Step=  648, Dmax= 1.5e-02 nm, Epot= -5.36716e+05 Fmax= 1.15030e+04, atom= 5974
Step=  649, Dmax= 7.6e-03 nm, Epot= -5.36772e+05 Fmax= 1.17573e+03, atom= 5974
Step=  650, Dmax= 9.1e-03 nm, Epot= -5.36814e+05 Fmax= 1.10558e+04, atom= 5974
Step=  651, Dmax= 1.1e-02 nm, Epot= -5.36888e+05 Fmax= 3.40580e+03, atom= 5974
Step=  652, Dmax= 1.3e-02 nm, Epot= -5.36841e+05 Fmax= 1.38369e+04, atom= 5974
Step=  653, Dmax= 6.6e-03 nm, Epot= -5.36906e+05 Fmax= 5.35749e+03, atom= 5974
Step=  654, Dmax= 7.9e-03 nm, Epot= -5.36927e+05 Fmax= 5.13451e+03, atom= 5974
Step=  655, Dmax= 9.5e-03 nm, Epot= -5.36936e+05 Fmax= 7.45949e+03, atom= 5974
Step=  656, Dmax= 1.1e-02 nm, Epot= -5.36955e+05 Fmax= 7.65787e+03, atom= 5974
Step=  657, Dmax= 1.4e-02 nm, Epot= -5.36950e+05 Fmax= 1.04231e+04, atom= 5974
Step=  658, Dmax= 6.8e-03 nm, Epot= -5.36997e+05 Fmax= 1.52722e+03, atom= 5974
Step=  659, Dmax= 8.2e-03 nm, Epot= -5.37022e+05 Fmax= 9.34187e+03, atom= 5974
Step=  660, Dmax= 9.8e-03 nm, Epot= -5.37074e+05 Fmax= 3.84802e+03, atom= 5974
Step=  661, Dmax= 1.2e-02 nm, Epot= -5.37046e+05 Fmax= 1.19812e+04, atom= 5974
Step=  662, Dmax= 5.9e-03 nm, Epot= -5.37093e+05 Fmax= 3.96951e+03, atom= 5974
Step=  663, Dmax= 7.1e-03 nm, Epot= -5.37108e+05 Fmax= 5.45897e+03, atom= 5974
Step=  664, Dmax= 8.5e-03 nm, Epot= -5.37126e+05 Fmax= 5.81664e+03, atom= 5974
Step=  665, Dmax= 1.0e-02 nm, Epot= -5.37134e+05 Fmax= 7.72097e+03, atom= 5974
Step=  666, Dmax= 1.2e-02 nm, Epot= -5.37148e+05 Fmax= 8.53167e+03, atom= 5974
Step=  667, Dmax= 1.5e-02 nm, Epot= -5.37143e+05 Fmax= 1.08972e+04, atom= 5974
Step=  668, Dmax= 7.3e-03 nm, Epot= -5.37197e+05 Fmax= 1.35208e+03, atom= 5974
Step=  669, Dmax= 8.8e-03 nm, Epot= -5.37224e+05 Fmax= 1.02955e+04, atom= 5974
Step=  670, Dmax= 1.1e-02 nm, Epot= -5.37284e+05 Fmax= 3.89197e+03, atom= 5974
Step=  671, Dmax= 1.3e-02 nm, Epot= -5.37243e+05 Fmax= 1.31495e+04, atom= 5974
Step=  672, Dmax= 6.3e-03 nm, Epot= -5.37302e+05 Fmax= 4.51740e+03, atom= 5974
Step=  673, Dmax= 7.6e-03 nm, Epot= -5.37317e+05 Fmax= 5.61317e+03, atom= 5974
Step=  674, Dmax= 9.1e-03 nm, Epot= -5.37332e+05 Fmax= 6.51111e+03, atom= 5974
Step=  675, Dmax= 1.1e-02 nm, Epot= -5.37340e+05 Fmax= 8.03622e+03, atom= 5974
Step=  676, Dmax= 1.3e-02 nm, Epot= -5.37349e+05 Fmax= 9.43781e+03, atom= 5974
Step=  677, Dmax= 1.6e-02 nm, Epot= -5.37344e+05 Fmax= 1.14356e+04, atom= 5974
Step=  678, Dmax= 7.9e-03 nm, Epot= -5.37405e+05 Fmax= 1.19728e+03, atom= 5974
Step=  679, Dmax= 9.5e-03 nm, Epot= -5.37438e+05 Fmax= 1.12728e+04, atom= 5974
Step=  680, Dmax= 1.1e-02 nm, Epot= -5.37508e+05 Fmax= 3.98727e+03, atom= 5974
Step=  681, Dmax= 1.4e-02 nm, Epot= -5.37452e+05 Fmax= 1.43622e+04, atom= 5974
Step=  682, Dmax= 6.8e-03 nm, Epot= -5.37524e+05 Fmax= 5.06105e+03, atom= 5974
Step=  683, Dmax= 8.2e-03 nm, Epot= -5.37540e+05 Fmax= 5.82246e+03, atom= 5974
Step=  684, Dmax= 9.8e-03 nm, Epot= -5.37552e+05 Fmax= 7.21306e+03, atom= 5974
Step=  685, Dmax= 1.2e-02 nm, Epot= -5.37561e+05 Fmax= 8.41715e+03, atom= 5974
Step=  686, Dmax= 1.4e-02 nm, Epot= -5.37563e+05 Fmax= 1.03675e+04, atom= 5974
Step=  687, Dmax= 1.7e-02 nm, Epot= -5.37560e+05 Fmax= 1.20530e+04, atom= 5974
Step=  688, Dmax= 8.5e-03 nm, Epot= -5.37629e+05 Fmax= 1.07531e+03, atom= 5974
Step=  689, Dmax= 1.0e-02 nm, Epot= -5.37668e+05 Fmax= 1.22575e+04, atom= 5974
Step=  690, Dmax= 1.2e-02 nm, Epot= -5.37749e+05 Fmax= 4.15438e+03, atom= 5974
Step=  691, Dmax= 1.5e-02 nm, Epot= -5.37674e+05 Fmax= 1.56053e+04, atom= 5974
Step=  692, Dmax= 7.3e-03 nm, Epot= -5.37763e+05 Fmax= 5.58186e+03, atom= 5974
Step=  693, Dmax= 8.8e-03 nm, Epot= -5.37779e+05 Fmax= 6.10869e+03, atom= 5974
Step=  694, Dmax= 1.1e-02 nm, Epot= -5.37787e+05 Fmax= 7.90455e+03, atom= 5974
Step=  695, Dmax= 1.3e-02 nm, Epot= -5.37796e+05 Fmax= 8.88477e+03, atom= 5974
Step=  696, Dmax= 1.5e-02 nm, Epot= -5.37792e+05 Fmax= 1.13038e+04, atom= 5974
Step=  697, Dmax= 7.6e-03 nm, Epot= -5.37849e+05 Fmax= 1.04023e+03, atom= 5974
Step=  698, Dmax= 9.1e-03 nm, Epot= -5.37884e+05 Fmax= 1.12292e+04, atom= 5974
Step=  699, Dmax= 1.1e-02 nm, Epot= -5.37960e+05 Fmax= 3.13279e+03, atom= 5974
Step=  700, Dmax= 1.3e-02 nm, Epot= -5.37905e+05 Fmax= 1.40130e+04, atom= 5974
Step=  701, Dmax= 6.6e-03 nm, Epot= -5.37973e+05 Fmax= 5.58929e+03, atom= 5974
Step=  702, Dmax= 7.9e-03 nm, Epot= -5.37994e+05 Fmax= 4.82149e+03, atom= 5974
Step=  703, Dmax= 9.5e-03 nm, Epot= -5.37996e+05 Fmax= 7.70698e+03, atom= 5974
Step=  704, Dmax= 1.1e-02 nm, Epot= -5.38017e+05 Fmax= 7.29561e+03, atom= 5974
Step=  705, Dmax= 1.4e-02 nm, Epot= -5.38004e+05 Fmax= 1.06764e+04, atom= 5974
Step=  706, Dmax= 6.8e-03 nm, Epot= -5.38055e+05 Fmax= 1.83919e+03, atom= 5974
Step=  707, Dmax= 8.2e-03 nm, Epot= -5.38065e+05 Fmax= 8.94051e+03, atom= 5974
Step=  708, Dmax= 9.8e-03 nm, Epot= -5.38110e+05 Fmax= 4.17268e+03, atom= 5974
Step=  709, Dmax= 1.2e-02 nm, Epot= -5.38082e+05 Fmax= 1.15205e+04, atom= 5974
Step=  710, Dmax= 5.9e-03 nm, Epot= -5.38129e+05 Fmax= 3.57382e+03, atom= 5974
Step=  711, Dmax= 7.1e-03 nm, Epot= -5.38140e+05 Fmax= 5.81448e+03, atom= 5974
Step=  712, Dmax= 8.5e-03 nm, Epot= -5.38159e+05 Fmax= 5.36688e+03, atom= 5974
Step=  713, Dmax= 1.0e-02 nm, Epot= -5.38161e+05 Fmax= 8.09282e+03, atom= 5974
Step=  714, Dmax= 1.2e-02 nm, Epot= -5.38179e+05 Fmax= 8.02787e+03, atom= 5974
Step=  715, Dmax= 1.5e-02 nm, Epot= -5.38164e+05 Fmax= 1.12718e+04, atom= 5974
Step=  716, Dmax= 7.3e-03 nm, Epot= -5.38222e+05 Fmax= 1.79721e+03, atom= 5974
Step=  717, Dmax= 8.8e-03 nm, Epot= -5.38229e+05 Fmax= 9.77253e+03, atom= 5974
Step=  718, Dmax= 1.1e-02 nm, Epot= -5.38281e+05 Fmax= 4.32576e+03, atom= 5974
Step=  719, Dmax= 1.3e-02 nm, Epot= -5.38242e+05 Fmax= 1.25567e+04, atom= 5974
Step=  720, Dmax= 6.3e-03 nm, Epot= -5.38299e+05 Fmax= 3.99968e+03, atom= 5974
Step=  721, Dmax= 7.6e-03 nm, Epot= -5.38309e+05 Fmax= 6.08199e+03, atom= 5974
Step=  722, Dmax= 9.1e-03 nm, Epot= -5.38327e+05 Fmax= 5.93420e+03, atom= 5974
Step=  723, Dmax= 1.1e-02 nm, Epot= -5.38327e+05 Fmax= 8.52186e+03, atom= 5974
Step=  724, Dmax= 5.5e-03 nm, Epot= -5.38355e+05 Fmax= 1.39118e+03, atom= 5974
Step=  725, Dmax= 6.6e-03 nm, Epot= -5.38381e+05 Fmax= 7.18229e+03, atom= 5974
Step=  726, Dmax= 7.9e-03 nm, Epot= -5.38415e+05 Fmax= 3.33146e+03, atom= 5974
Step=  727, Dmax= 9.4e-03 nm, Epot= -5.38407e+05 Fmax= 9.19877e+03, atom= 5974
Step=  728, Dmax= 4.7e-03 nm, Epot= -5.38432e+05 Fmax= 2.86839e+03, atom= 5974
Step=  729, Dmax= 5.7e-03 nm, Epot= -5.38446e+05 Fmax= 4.68339e+03, atom= 5974
Step=  730, Dmax= 6.8e-03 nm, Epot= -5.38464e+05 Fmax= 4.26827e+03, atom= 5974
Step=  731, Dmax= 8.2e-03 nm, Epot= -5.38472e+05 Fmax= 6.55539e+03, atom= 5974
Step=  732, Dmax= 9.8e-03 nm, Epot= -5.38490e+05 Fmax= 6.35590e+03, atom= 5974
Step=  733, Dmax= 1.2e-02 nm, Epot= -5.38486e+05 Fmax= 9.16367e+03, atom= 5974
Step=  734, Dmax= 5.9e-03 nm, Epot= -5.38521e+05 Fmax= 1.51756e+03, atom= 5974
Step=  735, Dmax= 7.0e-03 nm, Epot= -5.38541e+05 Fmax= 7.70357e+03, atom= 5974
Step=  736, Dmax= 8.5e-03 nm, Epot= -5.38577e+05 Fmax= 3.59515e+03, atom= 5974
Step=  737, Dmax= 1.0e-02 nm, Epot= -5.38563e+05 Fmax= 9.87624e+03, atom= 5974
Step=  738, Dmax= 5.1e-03 nm, Epot= -5.38594e+05 Fmax= 3.06482e+03, atom= 5974
Step=  739, Dmax= 6.1e-03 nm, Epot= -5.38607e+05 Fmax= 5.04596e+03, atom= 5974
Step=  740, Dmax= 7.3e-03 nm, Epot= -5.38625e+05 Fmax= 4.57022e+03, atom= 5974
Step=  741, Dmax= 8.8e-03 nm, Epot= -5.38629e+05 Fmax= 7.05153e+03, atom= 5974
Step=  742, Dmax= 1.1e-02 nm, Epot= -5.38647e+05 Fmax= 6.81806e+03, atom= 5974
Step=  743, Dmax= 1.3e-02 nm, Epot= -5.38639e+05 Fmax= 9.84208e+03, atom= 5974
Step=  744, Dmax= 6.3e-03 nm, Epot= -5.38681e+05 Fmax= 1.64384e+03, atom= 5974
Step=  745, Dmax= 7.6e-03 nm, Epot= -5.38695e+05 Fmax= 8.27049e+03, atom= 5974
Step=  746, Dmax= 9.1e-03 nm, Epot= -5.38735e+05 Fmax= 3.87135e+03, atom= 5974
Step=  747, Dmax= 1.1e-02 nm, Epot= -5.38713e+05 Fmax= 1.06126e+04, atom= 5974
Step=  748, Dmax= 5.5e-03 nm, Epot= -5.38752e+05 Fmax= 3.28244e+03, atom= 5974
Step=  749, Dmax= 6.5e-03 nm, Epot= -5.38764e+05 Fmax= 5.42682e+03, atom= 5974
Step=  750, Dmax= 7.8e-03 nm, Epot= -5.38782e+05 Fmax= 4.90378e+03, atom= 5974
Step=  751, Dmax= 9.4e-03 nm, Epot= -5.38784e+05 Fmax= 7.57379e+03, atom= 5974
Step=  752, Dmax= 1.1e-02 nm, Epot= -5.38803e+05 Fmax= 7.32507e+03, atom= 5974
Step=  753, Dmax= 1.4e-02 nm, Epot= -5.38789e+05 Fmax= 1.05567e+04, atom= 5974
Step=  754, Dmax= 6.8e-03 nm, Epot= -5.38839e+05 Fmax= 1.77032e+03, atom= 5974
Step=  755, Dmax= 8.1e-03 nm, Epot= -5.38847e+05 Fmax= 8.88817e+03, atom= 5974
Step=  756, Dmax= 9.8e-03 nm, Epot= -5.38892e+05 Fmax= 4.15964e+03, atom= 5974
Step=  757, Dmax= 1.2e-02 nm, Epot= -5.38861e+05 Fmax= 1.14141e+04, atom= 5974
Step=  758, Dmax= 5.9e-03 nm, Epot= -5.38909e+05 Fmax= 3.52524e+03, atom= 5974
Step=  759, Dmax= 7.0e-03 nm, Epot= -5.38918e+05 Fmax= 5.82625e+03, atom= 5974
Step=  760, Dmax= 8.4e-03 nm, Epot= -5.38936e+05 Fmax= 5.27064e+03, atom= 5974
Step=  761, Dmax= 1.0e-02 nm, Epot= -5.38935e+05 Fmax= 8.12410e+03, atom= 5974
Step=  762, Dmax= 5.1e-03 nm, Epot= -5.38960e+05 Fmax= 1.51245e+03, atom= 5974
Step=  763, Dmax= 6.1e-03 nm, Epot= -5.38980e+05 Fmax= 6.39366e+03, atom= 5974
Step=  764, Dmax= 7.3e-03 nm, Epot= -5.39008e+05 Fmax= 3.33933e+03, atom= 5974
Step=  765, Dmax= 8.7e-03 nm, Epot= -5.39004e+05 Fmax= 8.21455e+03, atom= 5974
Step=  766, Dmax= 4.4e-03 nm, Epot= -5.39024e+05 Fmax= 2.37941e+03, atom= 5974
Step=  767, Dmax= 5.2e-03 nm, Epot= -5.39037e+05 Fmax= 4.63710e+03, atom= 5974
Step=  768, Dmax= 6.3e-03 nm, Epot= -5.39054e+05 Fmax= 3.62534e+03, atom= 5974
Step=  769, Dmax= 7.6e-03 nm, Epot= -5.39060e+05 Fmax= 6.41070e+03, atom= 5974
Step=  770, Dmax= 9.1e-03 nm, Epot= -5.39079e+05 Fmax= 5.50996e+03, atom= 5974
Step=  771, Dmax= 1.1e-02 nm, Epot= -5.39071e+05 Fmax= 8.86483e+03, atom= 5974
Step=  772, Dmax= 5.4e-03 nm, Epot= -5.39104e+05 Fmax= 1.77709e+03, atom= 5974
Step=  773, Dmax= 6.5e-03 nm, Epot= -5.39116e+05 Fmax= 6.74028e+03, atom= 5974
Step=  774, Dmax= 7.8e-03 nm, Epot= -5.39144e+05 Fmax= 3.71476e+03, atom= 5974
Step=  775, Dmax= 9.4e-03 nm, Epot= -5.39134e+05 Fmax= 8.70517e+03, atom= 5974
Step=  776, Dmax= 4.7e-03 nm, Epot= -5.39160e+05 Fmax= 2.42828e+03, atom= 5974
Step=  777, Dmax= 5.6e-03 nm, Epot= -5.39170e+05 Fmax= 5.10854e+03, atom= 5974
Step=  778, Dmax= 6.8e-03 nm, Epot= -5.39189e+05 Fmax= 3.76543e+03, atom= 5974
Step=  779, Dmax= 8.1e-03 nm, Epot= -5.39190e+05 Fmax= 7.00794e+03, atom= 5974
Step=  780, Dmax= 9.8e-03 nm, Epot= -5.39211e+05 Fmax= 5.79344e+03, atom= 5974
Step=  781, Dmax= 1.2e-02 nm, Epot= -5.39197e+05 Fmax= 9.63134e+03, atom= 5974
Step=  782, Dmax= 5.9e-03 nm, Epot= -5.39237e+05 Fmax= 2.03492e+03, atom= 5974
Step=  783, Dmax= 7.0e-03 nm, Epot= -5.39243e+05 Fmax= 7.13268e+03, atom= 5974
Step=  784, Dmax= 8.4e-03 nm, Epot= -5.39272e+05 Fmax= 4.09670e+03, atom= 5974
Step=  785, Dmax= 1.0e-02 nm, Epot= -5.39258e+05 Fmax= 9.25403e+03, atom= 5974
Step=  786, Dmax= 5.1e-03 nm, Epot= -5.39289e+05 Fmax= 2.50161e+03, atom= 5974
Step=  787, Dmax= 6.1e-03 nm, Epot= -5.39297e+05 Fmax= 5.59227e+03, atom= 5974

In [305]:
print(out)

Energy minimization analysis

In [319]:
em_file = 'em.edr'
In [320]:
em_df = panedr.edr_to_df(em_file)
In [321]:
em_df.columns
Out[321]:
Index(['Time', 'Bond', 'U-B', 'Proper Dih.', 'LJ-14', 'Coulomb-14', 'LJ (SR)',
       'Coulomb (SR)', 'Coul. recip.', 'Position Rest.', 'Potential',
       'Pressure', 'Vir-XX', 'Vir-XY', 'Vir-XZ', 'Vir-YX', 'Vir-YY', 'Vir-YZ',
       'Vir-ZX', 'Vir-ZY', 'Vir-ZZ', 'Pres-XX', 'Pres-XY', 'Pres-XZ',
       'Pres-YX', 'Pres-YY', 'Pres-YZ', 'Pres-ZX', 'Pres-ZY', 'Pres-ZZ',
       '#Surf*SurfTen', 'T-rest'],
      dtype='object')
In [322]:
fig, ax = plt.subplots(3,2,figsize=(10,12))
em_df.plot('Time','Potential',ax=ax[0,0])
em_df.plot('Time','Pressure',ax=ax[0,1])
em_df.plot('Time','Bond',ax=ax[1,0])
em_df.plot('Time','Position Rest.',ax=ax[1,1])
#em_df.plot('Time','COM Pull En.',ax=ax[1,1])
em_df.plot('Time','Coulomb (SR)',ax=ax[2,0])
em_df.plot('Time','Coul. recip.',ax=ax[2,1])
Out[322]:
<matplotlib.axes._subplots.AxesSubplot at 0x7fce64632978>
In [324]:
mda_trr = mda.Universe(gro,'em.trr')

mda_view = nglview.show_mdanalysis(mda_trr)

mda_view.clear_representations()
mda_view.background = 'white'
mda_view.add_representation('ball+stick')
mda_view
/opt/apps/mdtools/jlh-11Jul19/lib/python3.6/site-packages/MDAnalysis/topology/guessers.py:80: UserWarning: Failed to guess the mass for the following atom types: A
  warnings.warn("Failed to guess the mass for the following atom types: {}".format(atom_type))
/opt/apps/mdtools/jlh-11Jul19/lib/python3.6/site-packages/MDAnalysis/coordinates/XDR.py:196: UserWarning: Reload offsets from trajectory
 ctime or size or n_atoms did not match
  warnings.warn("Reload offsets from trajectory\n "
/opt/apps/mdtools/jlh-11Jul19/lib/python3.6/site-packages/MDAnalysis/coordinates/PDB.py:916: UserWarning: Found no information for attr: 'altLocs' Using default value of ' '
  "".format(attrname, default))
/opt/apps/mdtools/jlh-11Jul19/lib/python3.6/site-packages/MDAnalysis/coordinates/PDB.py:916: UserWarning: Found no information for attr: 'icodes' Using default value of ' '
  "".format(attrname, default))
/opt/apps/mdtools/jlh-11Jul19/lib/python3.6/site-packages/MDAnalysis/coordinates/PDB.py:916: UserWarning: Found no information for attr: 'occupancies' Using default value of '1.0'
  "".format(attrname, default))
/opt/apps/mdtools/jlh-11Jul19/lib/python3.6/site-packages/MDAnalysis/coordinates/PDB.py:916: UserWarning: Found no information for attr: 'tempfactors' Using default value of '0.0'
  "".format(attrname, default))

Pulling

Utilize harmonic pulling to attach surfactants to substrate closely.

Create index groups for pulling

In [325]:
#pdb = '200_SDS_on_50_Ang_AFM_tip_model.pdb'
gro = 'em.gro'
top = 'sys.top'
ndx = 'standard.ndx'
In [326]:
pmd_top_gro = pmd.gromacs.GromacsTopologyFile(top)
#pmd_top_pdb = pmd.gromacs.GromacsTopologyFile(top)

pmd_gro = pmd.gromacs.GromacsGroFile.parse(gro)
pmd_top_gro.box = pmd_gro.box
pmd_top_gro.positions = pmd_gro.positions

#pmd_pdb = pmd.formats.pdb.PDBFile.parse(pdb)
#pmd_top_pdb.box = pmd_pdb.box
#pmd_top_pdb.positions = pmd_pdb.positions
In [327]:
tail_atom_ndx = np.array([
        i+1 for i,a in enumerate(pmd_top_gro.atoms) if a.name == 'C12' and a.residue.name == 'SDS' ])
# gromacs ndx starts at 1
In [328]:
tail_atom_ndx
Out[328]:
array([ 3912,  3954,  3996,  4038,  4080,  4122,  4164,  4206,  4248,
        4290,  4332,  4374,  4416,  4458,  4500,  4542,  4584,  4626,
        4668,  4710,  4752,  4794,  4836,  4878,  4920,  4962,  5004,
        5046,  5088,  5130,  5172,  5214,  5256,  5298,  5340,  5382,
        5424,  5466,  5508,  5550,  5592,  5634,  5676,  5718,  5760,
        5802,  5844,  5886,  5928,  5970,  6012,  6054,  6096,  6138,
        6180,  6222,  6264,  6306,  6348,  6390,  6432,  6474,  6516,
        6558,  6600,  6642,  6684,  6726,  6768,  6810,  6852,  6894,
        6936,  6978,  7020,  7062,  7104,  7146,  7188,  7230,  7272,
        7314,  7356,  7398,  7440,  7482,  7524,  7566,  7608,  7650,
        7692,  7734,  7776,  7818,  7860,  7902,  7944,  7986,  8028,
        8070,  8112,  8154,  8196,  8238,  8280,  8322,  8364,  8406,
        8448,  8490,  8532,  8574,  8616,  8658,  8700,  8742,  8784,
        8826,  8868,  8910,  8952,  8994,  9036,  9078,  9120,  9162,
        9204,  9246,  9288,  9330,  9372,  9414,  9456,  9498,  9540,
        9582,  9624,  9666,  9708,  9750,  9792,  9834,  9876,  9918,
        9960, 10002, 10044, 10086, 10128, 10170, 10212, 10254, 10296,
       10338, 10380, 10422, 10464, 10506, 10548, 10590, 10632, 10674,
       10716, 10758, 10800, 10842, 10884, 10926, 10968, 11010, 11052,
       11094, 11136, 11178, 11220, 11262, 11304, 11346, 11388, 11430,
       11472, 11514, 11556, 11598, 11640, 11682, 11724, 11766, 11808,
       11850, 11892, 11934, 11976, 12018, 12060, 12102, 12144, 12186,
       12228, 12270])

Generate standard index file for system

In [329]:
gmx_make_ndx = gromacs.make_ndx.Popen(
    f=gro,o=ndx,
    input='q',
    stdout=subprocess.PIPE,stderr=subprocess.PIPE)
In [330]:
out_str, err_str = gmx_make_ndx.communicate()
In [331]:
print(out_str)
Going to read 0 old index file(s)
Analysing residue names:
There are:  3873  Substrate residues
There are:   200 Surfactant residues
There are:   200        Ion residues
Analysing residues not classified as Protein/DNA/RNA/Water and splitting into groups...
Analysing residues not classified as Protein/DNA/RNA/Water and splitting into groups...
Analysing residues not classified as Protein/DNA/RNA/Water and splitting into groups...

  0 System              : 12473 atoms
  1 Substrate           :  3873 atoms
  2 AUM                 :  3873 atoms
  3 SDS                 :  8400 atoms
  4 NA                  :   200 atoms
  5 Surfactant          :  8400 atoms
  6 AUM                 :  3873 atoms
  7 SDS                 :  8400 atoms
  8 NA                  :   200 atoms
  9 Ion                 :   200 atoms
 10 AUM                 :  3873 atoms
 11 SDS                 :  8400 atoms
 12 NA                  :   200 atoms

 nr : group      '!': not  'name' nr name   'splitch' nr    Enter: list groups
 'a': atom       '&': and  'del' nr         'splitres' nr   'l': list residues
 't': atom type  '|': or   'keep' nr        'splitat' nr    'h': help
 'r': residue              'res' nr         'chain' char
 "name": group             'case': case sensitive           'q': save and quit
 'ri': residue index

> 

In [332]:
print(err_str)
                     :-) GROMACS - gmx make_ndx, 2018.1 (-:

                            GROMACS is written by:
     Emile Apol      Rossen Apostolov      Paul Bauer     Herman J.C. Berendsen
    Par Bjelkmar    Aldert van Buuren   Rudi van Drunen     Anton Feenstra  
  Gerrit Groenhof    Aleksei Iupinov   Christoph Junghans   Anca Hamuraru   
 Vincent Hindriksen Dimitrios Karkoulis    Peter Kasson        Jiri Kraus    
  Carsten Kutzner      Per Larsson      Justin A. Lemkul    Viveca Lindahl  
  Magnus Lundborg   Pieter Meulenhoff    Erik Marklund      Teemu Murtola   
    Szilard Pall       Sander Pronk      Roland Schulz     Alexey Shvetsov  
   Michael Shirts     Alfons Sijbers     Peter Tieleman    Teemu Virolainen 
 Christian Wennberg    Maarten Wolf   
                           and the project leaders:
        Mark Abraham, Berk Hess, Erik Lindahl, and David van der Spoel

Copyright (c) 1991-2000, University of Groningen, The Netherlands.
Copyright (c) 2001-2017, The GROMACS development team at
Uppsala University, Stockholm University and
the Royal Institute of Technology, Sweden.
check out http://www.gromacs.org for more information.

GROMACS is free software; you can redistribute it and/or modify it
under the terms of the GNU Lesser General Public License
as published by the Free Software Foundation; either version 2.1
of the License, or (at your option) any later version.

GROMACS:      gmx make_ndx, version 2018.1
Executable:   /opt/apps/gromacs/2018.1-gnu-7.3-openmpi-2.1.1/bin/gmx
Data prefix:  /opt/apps/gromacs/2018.1-gnu-7.3-openmpi-2.1.1
Working dir:  /mnt/dat/work/testuser/indenter/sandbox/20191110_packmol
Command line:
  gmx make_ndx -f em.gro -o standard.ndx


Reading structure file

Back Off! I just backed up standard.ndx to ./#standard.ndx.1#

GROMACS reminds you: "Unfortunately, "simulation" has become increasingly misused to mean nothing more than "calculation"" (Bill Jorgensen)


Enhance standard index file by pulling groups

In [333]:
pull_groups_ndx_in = gromacs.fileformats.NDX(ndx)
In [334]:
pull_groups_ndx_out = gromacs.fileformats.NDX()
In [335]:
for i, a in enumerate(tail_atom_ndx):
    pull_group_name = 'pull_group_{:04d}'.format(i)
    pull_groups_ndx_out[pull_group_name] = a
In [336]:
pull_groups_ndx_in.update(pull_groups_ndx_out)
In [337]:
pull_groups_ndx_in.write('pull_groups.ndx')

Create mdp input file with pulling groups and coordinates

In [445]:
# gromacs wrapper parses mdp files
pull_mdp = gromacs.fileformats.MDP('pull.mdp.template')

pull_mdp['nsteps']  = 10000

N_pull_coords = len(pull_groups_ndx_out)

pull_mdp['pull_ncoords']  = N_pull_coords
pull_mdp['pull_ngroups']  = N_pull_coords + 1
pull_mdp['pull_group1_name'] = 'Substrate' # the reference group

for i, n in enumerate(pull_groups_ndx_out):
    pull_mdp["pull_group{:d}_name".format(i+2)]   = n
    pull_mdp["pull_coord{:d}_type".format(i+1)]     = 'umbrella'  # harmonic potential
    pull_mdp["pull_coord{:d}_geometry".format(i+1)] = 'distance'  # simple distance increase
    pull_mdp["pull_coord{:d}_dim".format(i+1)]      = 'Y Y Y'     # pull in all directions
    pull_mdp["pull_coord{:d}_groups".format(i+1)]   = "1 {:d}".format(i+2) # groups 1 (Chain A) and 2 (Chain B) define the reaction coordinate
    pull_mdp["pull_coord{:d}_start".format(i+1)]    = 'yes'       # define initial COM distance > 0
    pull_mdp["pull_coord{:d}_rate".format(i+1)]     = -0.1         # 0.1 nm per ps = 10 nm per ns
    pull_mdp["pull_coord{:d}_k".format(i+1)]        = 1000        # kJ mol^-1 nm^-2

pull_mdp.write('pull.mdp')

Compile system

In [446]:
gmx_grompp = gromacs.grompp.Popen(
    f='pull.mdp',n='pull_groups.ndx',c=gro,r=gro,o='pull.tpr',p=top,
    stdout=subprocess.PIPE,stderr=subprocess.PIPE)

out = gmx_grompp.stdout.read()

err = gmx_grompp.stderr.read()
In [447]:
print(err)
                      :-) GROMACS - gmx grompp, 2018.1 (-:

                            GROMACS is written by:
     Emile Apol      Rossen Apostolov      Paul Bauer     Herman J.C. Berendsen
    Par Bjelkmar    Aldert van Buuren   Rudi van Drunen     Anton Feenstra  
  Gerrit Groenhof    Aleksei Iupinov   Christoph Junghans   Anca Hamuraru   
 Vincent Hindriksen Dimitrios Karkoulis    Peter Kasson        Jiri Kraus    
  Carsten Kutzner      Per Larsson      Justin A. Lemkul    Viveca Lindahl  
  Magnus Lundborg   Pieter Meulenhoff    Erik Marklund      Teemu Murtola   
    Szilard Pall       Sander Pronk      Roland Schulz     Alexey Shvetsov  
   Michael Shirts     Alfons Sijbers     Peter Tieleman    Teemu Virolainen 
 Christian Wennberg    Maarten Wolf   
                           and the project leaders:
        Mark Abraham, Berk Hess, Erik Lindahl, and David van der Spoel

Copyright (c) 1991-2000, University of Groningen, The Netherlands.
Copyright (c) 2001-2017, The GROMACS development team at
Uppsala University, Stockholm University and
the Royal Institute of Technology, Sweden.
check out http://www.gromacs.org for more information.

GROMACS is free software; you can redistribute it and/or modify it
under the terms of the GNU Lesser General Public License
as published by the Free Software Foundation; either version 2.1
of the License, or (at your option) any later version.

GROMACS:      gmx grompp, version 2018.1
Executable:   /opt/apps/gromacs/2018.1-gnu-7.3-openmpi-2.1.1/bin/gmx
Data prefix:  /opt/apps/gromacs/2018.1-gnu-7.3-openmpi-2.1.1
Working dir:  /mnt/dat/work/testuser/indenter/sandbox/20191110_packmol
Command line:
  gmx grompp -f pull.mdp -n pull_groups.ndx -c em.gro -r em.gro -o pull.tpr -p sys.top

Ignoring obsolete mdp entry 'title'
Replacing old mdp entry 'nstxtcout' by 'nstxout-compressed'

NOTE 1 [file pull.mdp]:
  With Verlet lists the optimal nstlist is >= 10, with GPUs >= 20. Note
  that with the Verlet scheme, nstlist has no effect on the accuracy of
  your simulation.

Setting the LD random seed to 931502962
Generated 98320 of the 98346 non-bonded parameter combinations
Generating 1-4 interactions: fudge = 1
Generated 64935 of the 98346 1-4 parameter combinations
Excluding 3 bonded neighbours molecule type 'Substrate'
Excluding 3 bonded neighbours molecule type 'Surfactant'
Excluding 1 bonded neighbours molecule type 'NA'
Removing all charge groups because cutoff-scheme=Verlet
Pull group 1 'Substrate' has 3873 atoms
Pull group 2 'pull_group_0000' has 1 atoms
Pull group 3 'pull_group_0001' has 1 atoms
Pull group 4 'pull_group_0002' has 1 atoms
Pull group 5 'pull_group_0003' has 1 atoms
Pull group 6 'pull_group_0004' has 1 atoms
Pull group 7 'pull_group_0005' has 1 atoms
Pull group 8 'pull_group_0006' has 1 atoms
Pull group 9 'pull_group_0007' has 1 atoms
Pull group 10 'pull_group_0008' has 1 atoms
Pull group 11 'pull_group_0009' has 1 atoms
Pull group 12 'pull_group_0010' has 1 atoms
Pull group 13 'pull_group_0011' has 1 atoms
Pull group 14 'pull_group_0012' has 1 atoms
Pull group 15 'pull_group_0013' has 1 atoms
Pull group 16 'pull_group_0014' has 1 atoms
Pull group 17 'pull_group_0015' has 1 atoms
Pull group 18 'pull_group_0016' has 1 atoms
Pull group 19 'pull_group_0017' has 1 atoms
Pull group 20 'pull_group_0018' has 1 atoms
Pull group 21 'pull_group_0019' has 1 atoms
Pull group 22 'pull_group_0020' has 1 atoms
Pull group 23 'pull_group_0021' has 1 atoms
Pull group 24 'pull_group_0022' has 1 atoms
Pull group 25 'pull_group_0023' has 1 atoms
Pull group 26 'pull_group_0024' has 1 atoms
Pull group 27 'pull_group_0025' has 1 atoms
Pull group 28 'pull_group_0026' has 1 atoms
Pull group 29 'pull_group_0027' has 1 atoms
Pull group 30 'pull_group_0028' has 1 atoms
Pull group 31 'pull_group_0029' has 1 atoms
Pull group 32 'pull_group_0030' has 1 atoms
Pull group 33 'pull_group_0031' has 1 atoms
Pull group 34 'pull_group_0032' has 1 atoms
Pull group 35 'pull_group_0033' has 1 atoms
Pull group 36 'pull_group_0034' has 1 atoms
Pull group 37 'pull_group_0035' has 1 atoms
Pull group 38 'pull_group_0036' has 1 atoms
Pull group 39 'pull_group_0037' has 1 atoms
Pull group 40 'pull_group_0038' has 1 atoms
Pull group 41 'pull_group_0039' has 1 atoms
Pull group 42 'pull_group_0040' has 1 atoms
Pull group 43 'pull_group_0041' has 1 atoms
Pull group 44 'pull_group_0042' has 1 atoms
Pull group 45 'pull_group_0043' has 1 atoms
Pull group 46 'pull_group_0044' has 1 atoms
Pull group 47 'pull_group_0045' has 1 atoms
Pull group 48 'pull_group_0046' has 1 atoms
Pull group 49 'pull_group_0047' has 1 atoms
Pull group 50 'pull_group_0048' has 1 atoms
Pull group 51 'pull_group_0049' has 1 atoms
Pull group 52 'pull_group_0050' has 1 atoms
Pull group 53 'pull_group_0051' has 1 atoms
Pull group 54 'pull_group_0052' has 1 atoms
Pull group 55 'pull_group_0053' has 1 atoms
Pull group 56 'pull_group_0054' has 1 atoms
Pull group 57 'pull_group_0055' has 1 atoms
Pull group 58 'pull_group_0056' has 1 atoms
Pull group 59 'pull_group_0057' has 1 atoms
Pull group 60 'pull_group_0058' has 1 atoms
Pull group 61 'pull_group_0059' has 1 atoms
Pull group 62 'pull_group_0060' has 1 atoms
Pull group 63 'pull_group_0061' has 1 atoms
Pull group 64 'pull_group_0062' has 1 atoms
Pull group 65 'pull_group_0063' has 1 atoms
Pull group 66 'pull_group_0064' has 1 atoms
Pull group 67 'pull_group_0065' has 1 atoms
Pull group 68 'pull_group_0066' has 1 atoms
Pull group 69 'pull_group_0067' has 1 atoms
Pull group 70 'pull_group_0068' has 1 atoms
Pull group 71 'pull_group_0069' has 1 atoms
Pull group 72 'pull_group_0070' has 1 atoms
Pull group 73 'pull_group_0071' has 1 atoms
Pull group 74 'pull_group_0072' has 1 atoms
Pull group 75 'pull_group_0073' has 1 atoms
Pull group 76 'pull_group_0074' has 1 atoms
Pull group 77 'pull_group_0075' has 1 atoms
Pull group 78 'pull_group_0076' has 1 atoms
Pull group 79 'pull_group_0077' has 1 atoms
Pull group 80 'pull_group_0078' has 1 atoms
Pull group 81 'pull_group_0079' has 1 atoms
Pull group 82 'pull_group_0080' has 1 atoms
Pull group 83 'pull_group_0081' has 1 atoms
Pull group 84 'pull_group_0082' has 1 atoms
Pull group 85 'pull_group_0083' has 1 atoms
Pull group 86 'pull_group_0084' has 1 atoms
Pull group 87 'pull_group_0085' has 1 atoms
Pull group 88 'pull_group_0086' has 1 atoms
Pull group 89 'pull_group_0087' has 1 atoms
Pull group 90 'pull_group_0088' has 1 atoms
Pull group 91 'pull_group_0089' has 1 atoms
Pull group 92 'pull_group_0090' has 1 atoms
Pull group 93 'pull_group_0091' has 1 atoms
Pull group 94 'pull_group_0092' has 1 atoms
Pull group 95 'pull_group_0093' has 1 atoms
Pull group 96 'pull_group_0094' has 1 atoms
Pull group 97 'pull_group_0095' has 1 atoms
Pull group 98 'pull_group_0096' has 1 atoms
Pull group 99 'pull_group_0097' has 1 atoms
Pull group 100 'pull_group_0098' has 1 atoms
Pull group 101 'pull_group_0099' has 1 atoms
Pull group 102 'pull_group_0100' has 1 atoms
Pull group 103 'pull_group_0101' has 1 atoms
Pull group 104 'pull_group_0102' has 1 atoms
Pull group 105 'pull_group_0103' has 1 atoms
Pull group 106 'pull_group_0104' has 1 atoms
Pull group 107 'pull_group_0105' has 1 atoms
Pull group 108 'pull_group_0106' has 1 atoms
Pull group 109 'pull_group_0107' has 1 atoms
Pull group 110 'pull_group_0108' has 1 atoms
Pull group 111 'pull_group_0109' has 1 atoms
Pull group 112 'pull_group_0110' has 1 atoms
Pull group 113 'pull_group_0111' has 1 atoms
Pull group 114 'pull_group_0112' has 1 atoms
Pull group 115 'pull_group_0113' has 1 atoms
Pull group 116 'pull_group_0114' has 1 atoms
Pull group 117 'pull_group_0115' has 1 atoms
Pull group 118 'pull_group_0116' has 1 atoms
Pull group 119 'pull_group_0117' has 1 atoms
Pull group 120 'pull_group_0118' has 1 atoms
Pull group 121 'pull_group_0119' has 1 atoms
Pull group 122 'pull_group_0120' has 1 atoms
Pull group 123 'pull_group_0121' has 1 atoms
Pull group 124 'pull_group_0122' has 1 atoms
Pull group 125 'pull_group_0123' has 1 atoms
Pull group 126 'pull_group_0124' has 1 atoms
Pull group 127 'pull_group_0125' has 1 atoms
Pull group 128 'pull_group_0126' has 1 atoms
Pull group 129 'pull_group_0127' has 1 atoms
Pull group 130 'pull_group_0128' has 1 atoms
Pull group 131 'pull_group_0129' has 1 atoms
Pull group 132 'pull_group_0130' has 1 atoms
Pull group 133 'pull_group_0131' has 1 atoms
Pull group 134 'pull_group_0132' has 1 atoms
Pull group 135 'pull_group_0133' has 1 atoms
Pull group 136 'pull_group_0134' has 1 atoms
Pull group 137 'pull_group_0135' has 1 atoms
Pull group 138 'pull_group_0136' has 1 atoms
Pull group 139 'pull_group_0137' has 1 atoms
Pull group 140 'pull_group_0138' has 1 atoms
Pull group 141 'pull_group_0139' has 1 atoms
Pull group 142 'pull_group_0140' has 1 atoms
Pull group 143 'pull_group_0141' has 1 atoms
Pull group 144 'pull_group_0142' has 1 atoms
Pull group 145 'pull_group_0143' has 1 atoms
Pull group 146 'pull_group_0144' has 1 atoms
Pull group 147 'pull_group_0145' has 1 atoms
Pull group 148 'pull_group_0146' has 1 atoms
Pull group 149 'pull_group_0147' has 1 atoms
Pull group 150 'pull_group_0148' has 1 atoms
Pull group 151 'pull_group_0149' has 1 atoms
Pull group 152 'pull_group_0150' has 1 atoms
Pull group 153 'pull_group_0151' has 1 atoms
Pull group 154 'pull_group_0152' has 1 atoms
Pull group 155 'pull_group_0153' has 1 atoms
Pull group 156 'pull_group_0154' has 1 atoms
Pull group 157 'pull_group_0155' has 1 atoms
Pull group 158 'pull_group_0156' has 1 atoms
Pull group 159 'pull_group_0157' has 1 atoms
Pull group 160 'pull_group_0158' has 1 atoms
Pull group 161 'pull_group_0159' has 1 atoms
Pull group 162 'pull_group_0160' has 1 atoms
Pull group 163 'pull_group_0161' has 1 atoms
Pull group 164 'pull_group_0162' has 1 atoms
Pull group 165 'pull_group_0163' has 1 atoms
Pull group 166 'pull_group_0164' has 1 atoms
Pull group 167 'pull_group_0165' has 1 atoms
Pull group 168 'pull_group_0166' has 1 atoms
Pull group 169 'pull_group_0167' has 1 atoms
Pull group 170 'pull_group_0168' has 1 atoms
Pull group 171 'pull_group_0169' has 1 atoms
Pull group 172 'pull_group_0170' has 1 atoms
Pull group 173 'pull_group_0171' has 1 atoms
Pull group 174 'pull_group_0172' has 1 atoms
Pull group 175 'pull_group_0173' has 1 atoms
Pull group 176 'pull_group_0174' has 1 atoms
Pull group 177 'pull_group_0175' has 1 atoms
Pull group 178 'pull_group_0176' has 1 atoms
Pull group 179 'pull_group_0177' has 1 atoms
Pull group 180 'pull_group_0178' has 1 atoms
Pull group 181 'pull_group_0179' has 1 atoms
Pull group 182 'pull_group_0180' has 1 atoms
Pull group 183 'pull_group_0181' has 1 atoms
Pull group 184 'pull_group_0182' has 1 atoms
Pull group 185 'pull_group_0183' has 1 atoms
Pull group 186 'pull_group_0184' has 1 atoms
Pull group 187 'pull_group_0185' has 1 atoms
Pull group 188 'pull_group_0186' has 1 atoms
Pull group 189 'pull_group_0187' has 1 atoms
Pull group 190 'pull_group_0188' has 1 atoms
Pull group 191 'pull_group_0189' has 1 atoms
Pull group 192 'pull_group_0190' has 1 atoms
Pull group 193 'pull_group_0191' has 1 atoms
Pull group 194 'pull_group_0192' has 1 atoms
Pull group 195 'pull_group_0193' has 1 atoms
Pull group 196 'pull_group_0194' has 1 atoms
Pull group 197 'pull_group_0195' has 1 atoms
Pull group 198 'pull_group_0196' has 1 atoms
Pull group 199 'pull_group_0197' has 1 atoms
Pull group 200 'pull_group_0198' has 1 atoms
Pull group 201 'pull_group_0199' has 1 atoms
Number of degrees of freedom in T-Coupling group rest is 17597.00

NOTE 2 [file pull.mdp]:
  NVE simulation with an initial temperature of zero: will use a Verlet
  buffer of 10%. Check your energy drift!

Pull group  natoms  pbc atom  distance at start  reference at t=0
       1      3873      1937
       2         1         0       3.179 nm          3.179 nm
       1      3873      1937
       3         1         0       2.910 nm          2.910 nm
       1      3873      1937
       4         1         0       2.933 nm          2.933 nm
       1      3873      1937
       5         1         0       3.051 nm          3.051 nm
       1      3873      1937
       6         1         0       3.179 nm          3.179 nm
       1      3873      1937
       7         1         0       2.951 nm          2.951 nm
       1      3873      1937
       8         1         0       3.136 nm          3.136 nm
       1      3873      1937
       9         1         0       3.262 nm          3.262 nm
       1      3873      1937
      10         1         0       3.156 nm          3.156 nm
       1      3873      1937
      11         1         0       2.919 nm          2.919 nm
       1      3873      1937
      12         1         0       3.143 nm          3.143 nm
       1      3873      1937
      13         1         0       2.931 nm          2.931 nm
       1      3873      1937
      14         1         0       2.941 nm          2.941 nm
       1      3873      1937
      15         1         0       2.991 nm          2.991 nm
       1      3873      1937
      16         1         0       3.126 nm          3.126 nm
       1      3873      1937
      17         1         0       3.066 nm          3.066 nm
       1      3873      1937
      18         1         0       3.223 nm          3.223 nm
       1      3873      1937
      19         1         0       3.110 nm          3.110 nm
       1      3873      1937
      20         1         0       3.126 nm          3.126 nm
       1      3873      1937
      21         1         0       3.085 nm          3.085 nm
       1      3873      1937
      22         1         0       3.179 nm          3.179 nm
       1      3873      1937
      23         1         0       2.961 nm          2.961 nm
       1      3873      1937
      24         1         0       2.918 nm          2.918 nm
       1      3873      1937
      25         1         0       2.988 nm          2.988 nm
       1      3873      1937
      26         1         0       3.061 nm          3.061 nm
       1      3873      1937
      27         1         0       3.070 nm          3.070 nm
       1      3873      1937
      28         1         0       3.221 nm          3.221 nm
       1      3873      1937
      29         1         0       2.988 nm          2.988 nm
       1      3873      1937
      30         1         0       2.905 nm          2.905 nm
       1      3873      1937
      31         1         0       2.917 nm          2.917 nm
       1      3873      1937
      32         1         0       3.225 nm          3.225 nm
       1      3873      1937
      33         1         0       3.099 nm          3.099 nm
       1      3873      1937
      34         1         0       3.086 nm          3.086 nm
       1      3873      1937
      35         1         0       3.146 nm          3.146 nm
       1      3873      1937
      36         1         0       2.993 nm          2.993 nm
       1      3873      1937
      37         1         0       2.887 nm          2.887 nm
       1      3873      1937
      38         1         0       3.158 nm          3.158 nm
       1      3873      1937
      39         1         0       3.200 nm          3.200 nm
       1      3873      1937
      40         1         0       2.930 nm          2.930 nm
       1      3873      1937
      41         1         0       3.184 nm          3.184 nm
       1      3873      1937
      42         1         0       2.898 nm          2.898 nm
       1      3873      1937
      43         1         0       2.993 nm          2.993 nm
       1      3873      1937
      44         1         0       2.907 nm          2.907 nm
       1      3873      1937
      45         1         0       2.905 nm          2.905 nm
       1      3873      1937
      46         1         0       3.183 nm          3.183 nm
       1      3873      1937
      47         1         0       3.187 nm          3.187 nm
       1      3873      1937
      48         1         0       3.216 nm          3.216 nm
       1      3873      1937
      49         1         0       3.079 nm          3.079 nm
       1      3873      1937
      50         1         0       3.140 nm          3.140 nm
       1      3873      1937
      51         1         0       3.171 nm          3.171 nm
       1      3873      1937
      52         1         0       3.217 nm          3.217 nm
       1      3873      1937
      53         1         0       3.184 nm          3.184 nm
       1      3873      1937
      54         1         0       3.047 nm          3.047 nm
       1      3873      1937
      55         1         0       2.887 nm          2.887 nm
       1      3873      1937
      56         1         0       2.911 nm          2.911 nm
       1      3873      1937
      57         1         0       3.167 nm          3.167 nm
       1      3873      1937
      58         1         0       3.000 nm          3.000 nm
       1      3873      1937
      59         1         0       3.184 nm          3.184 nm
       1      3873      1937
      60         1         0       3.048 nm          3.048 nm
       1      3873      1937
      61         1         0       3.000 nm          3.000 nm
       1      3873      1937
      62         1         0       3.189 nm          3.189 nm
       1      3873      1937
      63         1         0       3.182 nm          3.182 nm
       1      3873      1937
      64         1         0       3.046 nm          3.046 nm
       1      3873      1937
      65         1         0       2.985 nm          2.985 nm
       1      3873      1937
      66         1         0       2.856 nm          2.856 nm
       1      3873      1937
      67         1         0       2.876 nm          2.876 nm
       1      3873      1937
      68         1         0       3.170 nm          3.170 nm
       1      3873      1937
      69         1         0       3.166 nm          3.166 nm
       1      3873      1937
      70         1         0       3.118 nm          3.118 nm
       1      3873      1937
      71         1         0       2.927 nm          2.927 nm
       1      3873      1937
      72         1         0       2.948 nm          2.948 nm
       1      3873      1937
      73         1         0       3.034 nm          3.034 nm
       1      3873      1937
      74         1         0       3.020 nm          3.020 nm
       1      3873      1937
      75         1         0       3.186 nm          3.186 nm
       1      3873      1937
      76         1         0       3.009 nm          3.009 nm
       1      3873      1937
      77         1         0       2.966 nm          2.966 nm
       1      3873      1937
      78         1         0       2.937 nm          2.937 nm
       1      3873      1937
      79         1         0       2.958 nm          2.958 nm
       1      3873      1937
      80         1         0       3.092 nm          3.092 nm
       1      3873      1937
      81         1         0       3.064 nm          3.064 nm
       1      3873      1937
      82         1         0       2.982 nm          2.982 nm
       1      3873      1937
      83         1         0       3.211 nm          3.211 nm
       1      3873      1937
      84         1         0       3.066 nm          3.066 nm
       1      3873      1937
      85         1         0       3.227 nm          3.227 nm
       1      3873      1937
      86         1         0       3.112 nm          3.112 nm
       1      3873      1937
      87         1         0       2.869 nm          2.869 nm
       1      3873      1937
      88         1         0       3.012 nm          3.012 nm
       1      3873      1937
      89         1         0       3.225 nm          3.225 nm
       1      3873      1937
      90         1         0       3.204 nm          3.204 nm
       1      3873      1937
      91         1         0       2.928 nm          2.928 nm
       1      3873      1937
      92         1         0       3.194 nm          3.194 nm
       1      3873      1937
      93         1         0       3.272 nm          3.272 nm
       1      3873      1937
      94         1         0       3.169 nm          3.169 nm
       1      3873      1937
      95         1         0       3.240 nm          3.240 nm
       1      3873      1937
      96         1         0       3.053 nm          3.053 nm
       1      3873      1937
      97         1         0       3.102 nm          3.102 nm
       1      3873      1937
      98         1         0       2.831 nm          2.831 nm
       1      3873      1937
      99         1         0       2.986 nm          2.986 nm
       1      3873      1937
     100         1         0       2.926 nm          2.926 nm
       1      3873      1937
     101         1         0       3.075 nm          3.075 nm
       1      3873      1937
     102         1         0       3.208 nm          3.208 nm
       1      3873      1937
     103         1         0       2.939 nm          2.939 nm
       1      3873      1937
     104         1         0       2.808 nm          2.808 nm
       1      3873      1937
     105         1         0       3.047 nm          3.047 nm
       1      3873      1937
     106         1         0       2.946 nm          2.946 nm
       1      3873      1937
     107         1         0       2.880 nm          2.880 nm
       1      3873      1937
     108         1         0       2.940 nm          2.940 nm
       1      3873      1937
     109         1         0       3.082 nm          3.082 nm
       1      3873      1937
     110         1         0       3.131 nm          3.131 nm
       1      3873      1937
     111         1         0       3.176 nm          3.176 nm
       1      3873      1937
     112         1         0       3.165 nm          3.165 nm
       1      3873      1937
     113         1         0       2.954 nm          2.954 nm
       1      3873      1937
     114         1         0       3.002 nm          3.002 nm
       1      3873      1937
     115         1         0       3.238 nm          3.238 nm
       1      3873      1937
     116         1         0       2.959 nm          2.959 nm
       1      3873      1937
     117         1         0       2.963 nm          2.963 nm
       1      3873      1937
     118         1         0       2.969 nm          2.969 nm
       1      3873      1937
     119         1         0       3.014 nm          3.014 nm
       1      3873      1937
     120         1         0       3.078 nm          3.078 nm
       1      3873      1937
     121         1         0       2.952 nm          2.952 nm
       1      3873      1937
     122         1         0       2.917 nm          2.917 nm
       1      3873      1937
     123         1         0       3.097 nm          3.097 nm
       1      3873      1937
     124         1         0       2.887 nm          2.887 nm
       1      3873      1937
     125         1         0       3.224 nm          3.224 nm
       1      3873      1937
     126         1         0       3.090 nm          3.090 nm
       1      3873      1937
     127         1         0       3.241 nm          3.241 nm
       1      3873      1937
     128         1         0       3.030 nm          3.030 nm
       1      3873      1937
     129         1         0       2.964 nm          2.964 nm
       1      3873      1937
     130         1         0       3.062 nm          3.062 nm
       1      3873      1937
     131         1         0       3.044 nm          3.044 nm
       1      3873      1937
     132         1         0       3.100 nm          3.100 nm
       1      3873      1937
     133         1         0       3.024 nm          3.024 nm
       1      3873      1937
     134         1         0       3.174 nm          3.174 nm
       1      3873      1937
     135         1         0       2.940 nm          2.940 nm
       1      3873      1937
     136         1         0       2.970 nm          2.970 nm
       1      3873      1937
     137         1         0       3.191 nm          3.191 nm
       1      3873      1937
     138         1         0       2.936 nm          2.936 nm
       1      3873      1937
     139         1         0       2.922 nm          2.922 nm
       1      3873      1937
     140         1         0       3.211 nm          3.211 nm
       1      3873      1937
     141         1         0       2.860 nm          2.860 nm
       1      3873      1937
     142         1         0       3.111 nm          3.111 nm
       1      3873      1937
     143         1         0       2.877 nm          2.877 nm
       1      3873      1937
     144         1         0       3.085 nm          3.085 nm
       1      3873      1937
     145         1         0       3.087 nm          3.087 nm
       1      3873      1937
     146         1         0       2.938 nm          2.938 nm
       1      3873      1937
     147         1         0       3.139 nm          3.139 nm
       1      3873      1937
     148         1         0       2.983 nm          2.983 nm
       1      3873      1937
     149         1         0       2.919 nm          2.919 nm
       1      3873      1937
     150         1         0       3.038 nm          3.038 nm
       1      3873      1937
     151         1         0       2.990 nm          2.990 nm
       1      3873      1937
     152         1         0       2.959 nm          2.959 nm
       1      3873      1937
     153         1         0       3.244 nm          3.244 nm
       1      3873      1937
     154         1         0       3.152 nm          3.152 nm
       1      3873      1937
     155         1         0       3.091 nm          3.091 nm
       1      3873      1937
     156         1         0       3.015 nm          3.015 nm
       1      3873      1937
     157         1         0       3.226 nm          3.226 nm
       1      3873      1937
     158         1         0       2.919 nm          2.919 nm
       1      3873      1937
     159         1         0       3.190 nm          3.190 nm
       1      3873      1937
     160         1         0       3.181 nm          3.181 nm
       1      3873      1937
     161         1         0       3.007 nm          3.007 nm
       1      3873      1937
     162         1         0       2.989 nm          2.989 nm
       1      3873      1937
     163         1         0       3.188 nm          3.188 nm
       1      3873      1937
     164         1         0       2.985 nm          2.985 nm
       1      3873      1937
     165         1         0       3.134 nm          3.134 nm
       1      3873      1937
     166         1         0       3.189 nm          3.189 nm
       1      3873      1937
     167         1         0       3.043 nm          3.043 nm
       1      3873      1937
     168         1         0       2.870 nm          2.870 nm
       1      3873      1937
     169         1         0       3.079 nm          3.079 nm
       1      3873      1937
     170         1         0       3.112 nm          3.112 nm
       1      3873      1937
     171         1         0       3.050 nm          3.050 nm
       1      3873      1937
     172         1         0       3.054 nm          3.054 nm
       1      3873      1937
     173         1         0       2.830 nm          2.830 nm
       1      3873      1937
     174         1         0       2.935 nm          2.935 nm
       1      3873      1937
     175         1         0       2.858 nm          2.858 nm
       1      3873      1937
     176         1         0       3.203 nm          3.203 nm
       1      3873      1937
     177         1         0       2.928 nm          2.928 nm
       1      3873      1937
     178         1         0       3.126 nm          3.126 nm
       1      3873      1937
     179         1         0       2.944 nm          2.944 nm
       1      3873      1937
     180         1         0       2.902 nm          2.902 nm
       1      3873      1937
     181         1         0       2.890 nm          2.890 nm
       1      3873      1937
     182         1         0       2.925 nm          2.925 nm
       1      3873      1937
     183         1         0       3.003 nm          3.003 nm
       1      3873      1937
     184         1         0       2.937 nm          2.937 nm
       1      3873      1937
     185         1         0       2.925 nm          2.925 nm
       1      3873      1937
     186         1         0       3.111 nm          3.111 nm
       1      3873      1937
     187         1         0       3.061 nm          3.061 nm
       1      3873      1937
     188         1         0       3.154 nm          3.154 nm
       1      3873      1937
     189         1         0       2.872 nm          2.872 nm
       1      3873      1937
     190         1         0       3.234 nm          3.234 nm
       1      3873      1937
     191         1         0       3.227 nm          3.227 nm
       1      3873      1937
     192         1         0       3.017 nm          3.017 nm
       1      3873      1937
     193         1         0       3.148 nm          3.148 nm
       1      3873      1937
     194         1         0       3.095 nm          3.095 nm
       1      3873      1937
     195         1         0       3.128 nm          3.128 nm
       1      3873      1937
     196         1         0       3.021 nm          3.021 nm
       1      3873      1937
     197         1         0       2.884 nm          2.884 nm
       1      3873      1937
     198         1         0       3.073 nm          3.073 nm
       1      3873      1937
     199         1         0       3.019 nm          3.019 nm
       1      3873      1937
     200         1         0       3.105 nm          3.105 nm
       1      3873      1937
     201         1         0       2.922 nm          2.922 nm
Estimate for the relative computational load of the PME mesh part: 0.66

NOTE 3 [file pull.mdp]:
  The optimal PME mesh load for parallel simulations is below 0.5
  and for highly parallel simulations between 0.25 and 0.33,
  for higher performance, increase the cut-off and the PME grid spacing.



There were 3 notes

Back Off! I just backed up pull.tpr to ./#pull.tpr.4#

GROMACS reminds you: "I Don't Want to Calm Down" (Throwing Muses)


In [448]:
print(out)
turning all bonds into constraints...
turning all bonds into constraints...
turning all bonds into constraints...
Calculating fourier grid dimensions for X Y Z
Using a fourier grid of 120x120x120, spacing 0.113 0.113 0.113
This run will generate roughly 51 Mb of data

Run pulling simulation

In [449]:
gmx_mdrun = gromacs.mdrun.Popen(
    deffnm='pull',v=True,
    stdout=subprocess.PIPE,stderr=subprocess.PIPE)
In [450]:
out = gmx_mdrun.stdout.read()
err = gmx_mdrun.stderr.read()
In [451]:
print(err)
                      :-) GROMACS - gmx mdrun, 2018.1 (-:

                            GROMACS is written by:
     Emile Apol      Rossen Apostolov      Paul Bauer     Herman J.C. Berendsen
    Par Bjelkmar    Aldert van Buuren   Rudi van Drunen     Anton Feenstra  
  Gerrit Groenhof    Aleksei Iupinov   Christoph Junghans   Anca Hamuraru   
 Vincent Hindriksen Dimitrios Karkoulis    Peter Kasson        Jiri Kraus    
  Carsten Kutzner      Per Larsson      Justin A. Lemkul    Viveca Lindahl  
  Magnus Lundborg   Pieter Meulenhoff    Erik Marklund      Teemu Murtola   
    Szilard Pall       Sander Pronk      Roland Schulz     Alexey Shvetsov  
   Michael Shirts     Alfons Sijbers     Peter Tieleman    Teemu Virolainen 
 Christian Wennberg    Maarten Wolf   
                           and the project leaders:
        Mark Abraham, Berk Hess, Erik Lindahl, and David van der Spoel

Copyright (c) 1991-2000, University of Groningen, The Netherlands.
Copyright (c) 2001-2017, The GROMACS development team at
Uppsala University, Stockholm University and
the Royal Institute of Technology, Sweden.
check out http://www.gromacs.org for more information.

GROMACS is free software; you can redistribute it and/or modify it
under the terms of the GNU Lesser General Public License
as published by the Free Software Foundation; either version 2.1
of the License, or (at your option) any later version.

GROMACS:      gmx mdrun, version 2018.1
Executable:   /opt/apps/gromacs/2018.1-gnu-7.3-openmpi-2.1.1/bin/gmx
Data prefix:  /opt/apps/gromacs/2018.1-gnu-7.3-openmpi-2.1.1
Working dir:  /mnt/dat/work/testuser/indenter/sandbox/20191110_packmol
Command line:
  gmx mdrun -deffnm pull -v


Back Off! I just backed up pull.log to ./#pull.log.3#
Reading file pull.tpr, VERSION 2018.1 (single precision)
The number of OpenMP threads was set by environment variable OMP_NUM_THREADS to 1
Using 2 MPI threads
Using 1 OpenMP thread per tMPI thread


Back Off! I just backed up pull_pullx.xvg to ./#pull_pullx.xvg.3#

Back Off! I just backed up pull_pullf.xvg to ./#pull_pullf.xvg.3#

Back Off! I just backed up pull.xtc to ./#pull.xtc.3#

Back Off! I just backed up pull.trr to ./#pull.trr.3#

Back Off! I just backed up pull.edr to ./#pull.edr.3#
starting mdrun 'Indenter in solvent'
10000 steps,     20.0 ps.

step 0
step 2 Turning on dynamic load balancing, because the performance loss due to load imbalance is 2.6 %.

vol 0.97  imb F  2% 
step 100, will finish Wed Nov 20 17:02:41 2019vol 0.99  imb F 11% 
step 200, will finish Wed Nov 20 17:02:31 2019vol 0.92  imb F 24% 
step 300, will finish Wed Nov 20 17:02:01 2019vol 0.99  imb F  9% 
step 400, will finish Wed Nov 20 17:01:57 2019vol 0.95  imb F 18% 
step 500, will finish Wed Nov 20 17:02:13 2019vol 0.93  imb F  1% 
step 600, will finish Wed Nov 20 17:02:13 2019vol 0.96  imb F  4% 
step 700, will finish Wed Nov 20 17:02:06 2019vol 0.92  imb F 27% 
step 800, will finish Wed Nov 20 17:02:07 2019vol 0.96  imb F 18% 
step 900, will finish Wed Nov 20 17:02:12 2019vol 0.87  imb F  9% 
step 1000, will finish Wed Nov 20 17:02:13 2019vol 0.89  imb F  6% 
step 1100, will finish Wed Nov 20 17:02:10 2019vol 0.95  imb F  2% 
step 1200, will finish Wed Nov 20 17:02:14 2019vol 0.94  imb F  8% 
step 1300, will finish Wed Nov 20 17:02:14 2019vol 0.92  imb F 23% 
step 1400, will finish Wed Nov 20 17:02:15 2019vol 0.88  imb F  5% 
step 1500, will finish Wed Nov 20 17:02:19 2019vol 0.94  imb F  7% 
step 1600, will finish Wed Nov 20 17:02:21 2019vol 0.94  imb F 21% 
step 1700, will finish Wed Nov 20 17:02:25 2019vol 0.87  imb F 20% 
step 1800, will finish Wed Nov 20 17:02:27 2019vol 0.93  imb F 17% 
step 1900, will finish Wed Nov 20 17:02:29 2019vol 0.89  imb F  2% 
step 2000, will finish Wed Nov 20 17:02:29 2019vol 0.96  imb F 11% 
step 2100, will finish Wed Nov 20 17:02:29 2019vol 1.00  imb F 19% 
step 2200, will finish Wed Nov 20 17:02:29 2019vol 0.95  imb F 13% 
step 2300, will finish Wed Nov 20 17:02:28 2019vol 0.96  imb F  4% 
step 2400, will finish Wed Nov 20 17:02:27 2019vol 0.95  imb F  3% 
step 2500, will finish Wed Nov 20 17:02:25 2019vol 0.89  imb F 12% 
step 2600, will finish Wed Nov 20 17:02:24 2019vol 0.84  imb F 22% 
step 2700, will finish Wed Nov 20 17:02:24 2019vol 0.95  imb F 17% 
step 2800, will finish Wed Nov 20 17:02:24 2019
step 2840 Turning off dynamic load balancing, because it is degrading performance.

imb F 22% 
step 2900, will finish Wed Nov 20 17:02:26 2019imb F 12% 
step 3000 Turning on dynamic load balancing, because the performance loss due to load imbalance is 3.8 %.


step 3000, will finish Wed Nov 20 17:02:26 2019
step 3020 Turning off dynamic load balancing, because it is degrading performance.

imb F 17% 
step 3100 Turning on dynamic load balancing, because the performance loss due to load imbalance is 3.8 %.


step 3100, will finish Wed Nov 20 17:02:26 2019
step 3140 Turning off dynamic load balancing, because it is degrading performance.

imb F 19% 
step 3200 Will no longer try dynamic load balancing, as it degraded performance.


step 3200, will finish Wed Nov 20 17:02:28 2019imb F 16% 
step 3300, will finish Wed Nov 20 17:02:28 2019imb F 24% 
step 3400, will finish Wed Nov 20 17:02:27 2019imb F 20% 
step 3500, will finish Wed Nov 20 17:02:29 2019imb F 17% 
step 3600, will finish Wed Nov 20 17:02:29 2019imb F 22% 
step 3700, will finish Wed Nov 20 17:02:34 2019imb F  0% 
step 3800, will finish Wed Nov 20 17:02:35 2019imb F 19% 
step 3900, will finish Wed Nov 20 17:02:35 2019imb F 10% 
step 4000, will finish Wed Nov 20 17:02:34 2019imb F  9% 
step 4100, will finish Wed Nov 20 17:02:34 2019imb F 21% 
step 4200, will finish Wed Nov 20 17:02:33 2019imb F 10% 
step 4300, will finish Wed Nov 20 17:02:32 2019imb F 13% 
step 4400, will finish Wed Nov 20 17:02:32 2019imb F 17% 
step 4500, will finish Wed Nov 20 17:02:31 2019imb F 14% 
step 4600, will finish Wed Nov 20 17:02:33 2019imb F 22% 
step 4700, will finish Wed Nov 20 17:02:36 2019imb F 11% 
step 4800, will finish Wed Nov 20 17:02:36 2019imb F 15% 
step 4900, will finish Wed Nov 20 17:02:36 2019imb F 20% 
step 5000, will finish Wed Nov 20 17:02:35 2019imb F  7% 
step 5100, will finish Wed Nov 20 17:02:35 2019imb F 21% 
step 5200, will finish Wed Nov 20 17:02:36 2019imb F 11% 
step 5300, will finish Wed Nov 20 17:02:37 2019imb F 10% 
step 5400, will finish Wed Nov 20 17:02:37 2019imb F 20% 
step 5500, will finish Wed Nov 20 17:02:39 2019imb F  6% 
step 5600, will finish Wed Nov 20 17:02:40 2019imb F 10% 
step 5700, will finish Wed Nov 20 17:02:40 2019imb F 34% 
step 5800, will finish Wed Nov 20 17:02:41 2019imb F 13% 
step 5900, will finish Wed Nov 20 17:02:42 2019imb F 24% 
step 6000, will finish Wed Nov 20 17:02:43 2019imb F 26% 
step 6100, will finish Wed Nov 20 17:02:43 2019imb F 30% 
step 6200, will finish Wed Nov 20 17:02:44 2019imb F 22% 
step 6300, will finish Wed Nov 20 17:02:44 2019imb F 17% 
step 6400, will finish Wed Nov 20 17:02:45 2019imb F 19% 
step 6500, will finish Wed Nov 20 17:02:46 2019imb F  8% 
step 6600, will finish Wed Nov 20 17:02:47 2019imb F 12% 
step 6700, will finish Wed Nov 20 17:02:48 2019imb F 33% 
step 6800, will finish Wed Nov 20 17:02:49 2019imb F 15% 
step 6900, will finish Wed Nov 20 17:02:48 2019imb F 13% 
step 7000, will finish Wed Nov 20 17:02:48 2019imb F 16% 
step 7100, will finish Wed Nov 20 17:02:48 2019imb F 10% 
step 7200, will finish Wed Nov 20 17:02:48 2019imb F 20% 
step 7300, will finish Wed Nov 20 17:02:49 2019imb F  2% 
step 7400, remaining wall clock time:   289 s          imb F 19% 
step 7500, remaining wall clock time:   278 s          imb F 22% 
step 7600, remaining wall clock time:   267 s          imb F 20% 
step 7700, remaining wall clock time:   256 s          imb F 13% 
step 7800, remaining wall clock time:   245 s          imb F 24% 
step 7900, remaining wall clock time:   234 s          imb F  4% 
step 8000, remaining wall clock time:   223 s          imb F 24% 
step 8100, remaining wall clock time:   212 s          imb F 11% 
step 8200, remaining wall clock time:   201 s          imb F  9% 
step 8300, remaining wall clock time:   189 s          imb F 20% 
step 8400, remaining wall clock time:   178 s          imb F 27% 
step 8500, remaining wall clock time:   167 s          imb F 21% 
step 8600, remaining wall clock time:   156 s          imb F 25% 
step 8700, remaining wall clock time:   145 s          imb F 19% 
step 8800, remaining wall clock time:   134 s          imb F 17% 
step 8900, remaining wall clock time:   122 s          imb F 26% 
step 9000, remaining wall clock time:   111 s          imb F 24% 
step 9100, remaining wall clock time:   100 s          imb F 20% 
step 9200, remaining wall clock time:    89 s          imb F 27% 
step 9300, remaining wall clock time:    78 s          imb F 23% 
step 9400, remaining wall clock time:    67 s          imb F  5% 
step 9500, remaining wall clock time:    56 s          imb F 20% 
step 9600, remaining wall clock time:    44 s          imb F 18% 
step 9700, remaining wall clock time:    33 s          imb F 12% 
step 9800, remaining wall clock time:    22 s          imb F 19% 
step 9900, remaining wall clock time:    11 s          imb F 18% 
Writing final coordinates.

Back Off! I just backed up pull.gro to ./#pull.gro.3#

step 10000, remaining wall clock time:     0 s          
 Dynamic load balancing report:
 DLB got disabled because it was unsuitable to use.
 Average load imbalance: 11.7%.
 The balanceable part of the MD step is 33%, load imbalance is computed from this.
 Part of the total run time spent waiting due to load imbalance: 3.9%.


NOTE: 14 % of the run time was spent in domain decomposition,
      9 % of the run time was spent in pair search,
      you might want to increase nstlist (this has no effect on accuracy)

               Core t (s)   Wall t (s)        (%)
       Time:     2246.020     1123.010      200.0
                 (ns/day)    (hour/ns)
Performance:        1.539       15.596

GROMACS reminds you: "Don't Follow Me Home" (Throwing Muses)


In [456]:
print(out)

Pulling analysis

Global observables

In [457]:
edr_file = 'pull.edr'
In [458]:
edr_df = panedr.edr_to_df(edr_file)
In [459]:
edr_df.columns
Out[459]:
Index(['Time', 'Restraint Pot.', 'U-B', 'Proper Dih.', 'LJ-14', 'Coulomb-14',
       'LJ (SR)', 'Coulomb (SR)', 'Coul. recip.', 'Position Rest.',
       'COM Pull En.', 'Potential', 'Kinetic En.', 'Total Energy',
       'Temperature', 'Pressure', 'Constr. rmsd', 'Vir-XX', 'Vir-XY', 'Vir-XZ',
       'Vir-YX', 'Vir-YY', 'Vir-YZ', 'Vir-ZX', 'Vir-ZY', 'Vir-ZZ', 'Pres-XX',
       'Pres-XY', 'Pres-XZ', 'Pres-YX', 'Pres-YY', 'Pres-YZ', 'Pres-ZX',
       'Pres-ZY', 'Pres-ZZ', '#Surf*SurfTen', 'T-rest'],
      dtype='object')
In [460]:
fig, ax = plt.subplots(3,2,figsize=(10,12))
edr_df.plot('Time','Potential',ax=ax[0,0])
edr_df.plot('Time','Pressure',ax=ax[0,1])
#edr_df.plot('Time','Bond',ax=ax[1,0])
edr_df.plot('Time','Position Rest.',ax=ax[1,0])
edr_df.plot('Time','COM Pull En.',ax=ax[1,1])
edr_df.plot('Time','Coulomb (SR)',ax=ax[2,0])
edr_df.plot('Time','Coul. recip.',ax=ax[2,1])
Out[460]:
<matplotlib.axes._subplots.AxesSubplot at 0x7fce2a732be0>

Pulling forces

In [461]:
# read xvg file
pull_f_xvg = mda.auxiliary.XVG.XVGFileReader('pull_pullf.xvg')
pull_f_t = pull_f_xvg.read_all_times()
# first data column contains time, strip
pull_f = np.array([ f.data[1:] for f in pull_f_xvg ])
In [462]:
for i in range(0,199,50):
    plt.plot(pull_f_t,pull_f[:,i])

Pulling groups movement

In [463]:
pull_x_xvg = gromacs.fileformats.XVG('pull_pullx.xvg',)
In [464]:
pull_x_xvg.array
Out[464]:
array([[ 0.     ,  0.2    ,  0.4    , ..., 19.6    , 19.8    , 20.     ],
       [ 3.17954,  3.17679,  3.16642, ...,  2.54508,  2.53793,  2.56225],
       [ 3.17949,  3.15949,  3.13949, ...,  1.21949,  1.19949,  1.17949],
       ...,
       [ 4.71707,  4.70175,  4.70073, ...,  4.43672,  4.44362,  4.42686],
       [ 4.59141,  4.67986,  4.6507 , ...,  5.67136,  5.66654,  5.6566 ],
       [ 7.13757,  7.12856,  7.14868, ...,  7.52999,  7.54739,  7.5289 ]])
In [465]:
len(pull_x_xvg.names)
Out[465]:
2200
In [466]:
# that many columns perr pull coordinate
N_cols_per_coord = int(len(pull_x_xvg.names) / N_pull_coords)
In [467]:
# with content
legend = pull_x_xvg.names[:11]
In [468]:
legend
Out[468]:
['1',
 '1 ref',
 '1 dX',
 '1 dY',
 '1 dZ',
 '1 g 1 X',
 '1 g 1 Y',
 '1 g 1 Z',
 '1 g 2 X',
 '1 g 2 Y',
 '1 g 2 Z']
In [469]:
pull_x_xvg.names[-3:]
Out[469]:
['200 g 2 X', '200 g 2 Y', '200 g 2 Z']
In [470]:
for i in range(11):
    plt.plot(pull_x_xvg.array[0,:],pull_x_xvg.array[i+1,:],label=legend[i])
plt.legend()
Out[470]:
<matplotlib.legend.Legend at 0x7fce31377470>
In [471]:
for i in range(11):
    plt.plot(pull_x_xvg.array[0,:],pull_x_xvg.array[i+1,:],label=legend[i])
plt.legend()
Out[471]:
<matplotlib.legend.Legend at 0x7fce31953240>
In [472]:
# sqrt(dx^2+dy^2+dz^2), the distance between pulling groups (i.e. one surfactant tail atom and the Au COM)
for i in range(0,150,30):
    plt.plot(pull_x_xvg.array[0,:],
             np.sqrt(pull_x_xvg.array[i*11+3,:]**2+pull_x_xvg.array[i*11+4,:]**2+pull_x_xvg.array[i*11+5,:]**2))
plt.legend()
WARNING:matplotlib.legend:No handles with labels found to put in legend.
Out[472]:
<matplotlib.legend.Legend at 0x7fce3197fa20>
In [473]:
pull_x_xvg.plot(columns=[0,12])
Out[473]:
<matplotlib.axes._subplots.AxesSubplot at 0x7fce31353780>

Visualize trajectory

In [272]:
gro_em = 'pull.gro'
In [273]:
mda_trr = mda.Universe('em.gro','pull.trr')

mda_view = nglview.show_mdanalysis(mda_trr)

mda_view.clear_representations()
mda_view.background = 'white'
mda_view.add_representation('ball+stick')
mda_view
/opt/apps/mdtools/jlh-11Jul19/lib/python3.6/site-packages/MDAnalysis/topology/guessers.py:80: UserWarning: Failed to guess the mass for the following atom types: A
  warnings.warn("Failed to guess the mass for the following atom types: {}".format(atom_type))
/opt/apps/mdtools/jlh-11Jul19/lib/python3.6/site-packages/MDAnalysis/coordinates/PDB.py:916: UserWarning: Found no information for attr: 'altLocs' Using default value of ' '
  "".format(attrname, default))
/opt/apps/mdtools/jlh-11Jul19/lib/python3.6/site-packages/MDAnalysis/coordinates/PDB.py:916: UserWarning: Found no information for attr: 'icodes' Using default value of ' '
  "".format(attrname, default))
/opt/apps/mdtools/jlh-11Jul19/lib/python3.6/site-packages/MDAnalysis/coordinates/PDB.py:916: UserWarning: Found no information for attr: 'occupancies' Using default value of '1.0'
  "".format(attrname, default))
/opt/apps/mdtools/jlh-11Jul19/lib/python3.6/site-packages/MDAnalysis/coordinates/PDB.py:916: UserWarning: Found no information for attr: 'tempfactors' Using default value of '0.0'
  "".format(attrname, default))
In [536]:
mda_xtc = mda.Universe(gro,'pull.xtc')
mda_view = nglview.show_mdanalysis(mda_xtc)
mda_view.clear_representations()
mda_view.background = 'white'
mda_view.add_representation('ball+stick')
mda_view
/opt/apps/mdtools/jlh-11Jul19/lib/python3.6/site-packages/MDAnalysis/coordinates/XDR.py:196: UserWarning: Reload offsets from trajectory
 ctime or size or n_atoms did not match
  warnings.warn("Reload offsets from trajectory\n "

MSD

In [476]:
substrate = mda_trr.atoms[mda_trr.atoms.names == 'AU']
In [477]:
surfactant_head = mda_trr.atoms[mda_trr.atoms.names == 'S']
In [478]:
rms_substrate = mda_rms.RMSD(substrate,ref_frame=0)
INFO:MDAnalysis.analysis.rmsd:RMS calculation for 3873 atoms.
In [479]:
rms_substrate.run()
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
INFO:MDAnalysis.analysis.base:Finishing up
Out[479]:
<MDAnalysis.analysis.rms.RMSD at 0x7fce3230b550>
In [480]:
rmsd = rms_substrate.rmsd.T   # transpose makes it easier for plotting
time = rmsd[1]
In [481]:
plt.plot(time,rmsd[2])
Out[481]:
[<matplotlib.lines.Line2D at 0x7fce325af898>]
In [482]:
rms_surfactant_head = mda_rms.RMSD(surfactant_head,ref_frame=0)
INFO:MDAnalysis.analysis.rmsd:RMS calculation for 200 atoms.
In [483]:
rms_surfactant_head.run()
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
INFO:MDAnalysis.analysis.base:Finishing up
Out[483]:
<MDAnalysis.analysis.rms.RMSD at 0x7fce32599fd0>
In [484]:
rmsd = rms_surfactant_head.rmsd.T   # transpose makes it easier for plotting
time = rmsd[1]
In [485]:
plt.plot(time,rmsd[2])
Out[485]:
[<matplotlib.lines.Line2D at 0x7fce32595c18>]

Au-S (substrate - head group )RDF

In [486]:
len(mda_trr.trajectory)
Out[486]:
101
In [487]:
rdf_substrate_headgroup = mda_rdf.InterRDF(
    substrate,surfactant_head,range=(0.0,80.0),verbose=True)
In [488]:
bins = []
rdf  = []
for i in range(len(mda_trr.trajectory)):
    rdf_substrate_headgroup = mda_rdf.InterRDF(
        substrate,surfactant_head,range=(0.0,80.0),verbose=True)
    rdf_substrate_headgroup.run(start=i,stop=i+1)
    bins.append(rdf_substrate_headgroup.bins.copy())
    rdf.append(rdf_substrate_headgroup.rdf.copy())
bins = np.array(bins)
rdf = np.array(rdf)
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
INFO:MDAnalysis.analysis.base:Choosing frames to analyze
INFO:MDAnalysis.analysis.base:Starting preparation
Step     1/1 [100.0%]
INFO:MDAnalysis.analysis.base:Finishing up
In [489]:
# indicates desired approach towards substrate
plt.plot(bins[0],rdf[0],label="Initial RDF")
plt.plot(bins[3],rdf[4],label="Intermediat RDF")
plt.plot(bins[-1],rdf[-1],label="Final RDF")
plt.legend()
Out[489]:
<matplotlib.legend.Legend at 0x7fce325bdba8>

Solvation

Now, fill the box with water.

In [560]:
gro = 'pull.gro'
In [561]:
# use -scale 0.5 -maxsol N for non-standard conditions
gmx_solvate = gromacs.solvate.Popen(
    cp=gro, cs='spc216.gro',o='solvated.gro',p=top,
    stdout=subprocess.PIPE,stderr=subprocess.PIPE)

out = gmx_solvate.stdout.read()
err = gmx_solvate.stderr.read()
In [562]:
print(out)
WARNING: Masses and atomic (Van der Waals) radii will be guessed
         based on residue and atom names, since they could not be
         definitively assigned from the information in your input
         files. These guessed numbers might deviate from the mass
         and radius of the atom type. Please check the output
         files if necessary.

NOTE: From version 5.0 gmx solvate uses the Van der Waals radii
from the source below. This means the results may be different
compared to previous GROMACS versions.

++++ PLEASE READ AND CITE THE FOLLOWING REFERENCE ++++
A. Bondi
van der Waals Volumes and Radii
J. Phys. Chem. 68 (1964) pp. 441-451
-------- -------- --- Thank You --- -------- --------

Adding line for 77531 solvent molecules to topology file (sys.top)

In [563]:
print(err)
                     :-) GROMACS - gmx solvate, 2018.1 (-:

                            GROMACS is written by:
     Emile Apol      Rossen Apostolov      Paul Bauer     Herman J.C. Berendsen
    Par Bjelkmar    Aldert van Buuren   Rudi van Drunen     Anton Feenstra  
  Gerrit Groenhof    Aleksei Iupinov   Christoph Junghans   Anca Hamuraru   
 Vincent Hindriksen Dimitrios Karkoulis    Peter Kasson        Jiri Kraus    
  Carsten Kutzner      Per Larsson      Justin A. Lemkul    Viveca Lindahl  
  Magnus Lundborg   Pieter Meulenhoff    Erik Marklund      Teemu Murtola   
    Szilard Pall       Sander Pronk      Roland Schulz     Alexey Shvetsov  
   Michael Shirts     Alfons Sijbers     Peter Tieleman    Teemu Virolainen 
 Christian Wennberg    Maarten Wolf   
                           and the project leaders:
        Mark Abraham, Berk Hess, Erik Lindahl, and David van der Spoel

Copyright (c) 1991-2000, University of Groningen, The Netherlands.
Copyright (c) 2001-2017, The GROMACS development team at
Uppsala University, Stockholm University and
the Royal Institute of Technology, Sweden.
check out http://www.gromacs.org for more information.

GROMACS is free software; you can redistribute it and/or modify it
under the terms of the GNU Lesser General Public License
as published by the Free Software Foundation; either version 2.1
of the License, or (at your option) any later version.

GROMACS:      gmx solvate, version 2018.1
Executable:   /opt/apps/gromacs/2018.1-gnu-7.3-openmpi-2.1.1/bin/gmx
Data prefix:  /opt/apps/gromacs/2018.1-gnu-7.3-openmpi-2.1.1
Working dir:  /mnt/dat/work/testuser/indenter/sandbox/20191110_packmol
Command line:
  gmx solvate -cp pull.gro -cs spc216.gro -o solvated.gro -p sys.top

Reading solute configuration
Indenter in solvent
Containing 12473 atoms in 4273 residues
Reading solvent configuration
216H2O,WATJP01,SPC216,SPC-MODEL,300K,BOX(M)=1.86206NM,WFVG,MAR. 1984
Containing 648 atoms in 216 residues

Initialising inter-atomic distances...
Generating solvent configuration
Will generate new solvent configuration of 8x8x8 boxes
Solvent box contains 267810 atoms in 89270 residues
Removed 19782 solvent atoms due to solvent-solvent overlap
Removed 15435 solvent atoms due to solute-solvent overlap
Sorting configuration
Found 1 molecule type:
    SOL (   3 atoms): 77531 residues
Generated solvent containing 232593 atoms in 77531 residues
Writing generated configuration to solvated.gro

Back Off! I just backed up solvated.gro to ./#solvated.gro.3#

Output configuration contains 245066 atoms in 81804 residues
Volume                 :     2502.29 (nm^3)
Density                :     994.981 (g/l)
Number of SOL molecules:  77531   

Processing topology

Back Off! I just backed up sys.top to ./#sys.top.4#

GROMACS reminds you: "Nobody Never Learnt No-Nothing from No History" (Gogol Bordello)


Energy minimization with restraints

Again, relax the system a little with positional constraints applied to all ions.

Execute trial task via Fireworks on remote resource

In [20]:
lpad = LaunchPad.auto_load()

A trial task sent to FORHLR2:

In [71]:
gmx_test_task = CmdTask(
    cmd = 'gmx',
    opt = '-h',
    stderr_file = 'std.err', 
    stdout_file = 'std.out', 
    use_shell = True)
In [72]:
gmx_test_fw = Firework(
    gmx_test_task, 
    name = 'FORHLR2 GMX test fw',
    spec = { 
        '_category': 'forhlr2_noqueue',
        '_files_out': {
            'stdout': 'std.out',
            'stderr': 'std.err'} 
        } )
In [73]:
fw_ids = lpad.add_wf(gmx_test_fw)
2019-11-29 16:32:52,587 INFO Added a workflow. id_map: {-7: 23404}
INFO:launchpad:Added a workflow. id_map: {-7: 23404}
In [74]:
fw_ids
Out[74]:
{-7: 23404}
In [86]:
# lpad.delete_wf(INSERT_ID,delete_launch_dirs=True)
Remove folders ['/pfs/work6/workspace/scratch/fr_jh1130-fw-0/fireworks/launchpad/launcher_2019-11-29-15-23-59-541939']
Remove fws [23402]
Remove launches [18829]
Removing workflow.

Compile system

In [237]:
top = 'sys.top'
In [238]:
gro = 'solvated.gro'
In [137]:
gmx_grompp = gromacs.grompp.Popen(
    f='em_solvated.mdp',c=gro,r=gro,o='em_solvated.tpr',p=top,
    stdout=subprocess.PIPE,stderr=subprocess.PIPE)

out = gmx_grompp.stdout.read()
err = gmx_grompp.stderr.read()
In [138]:
print(err)
                      :-) GROMACS - gmx grompp, 2018.1 (-:

                            GROMACS is written by:
     Emile Apol      Rossen Apostolov      Paul Bauer     Herman J.C. Berendsen
    Par Bjelkmar    Aldert van Buuren   Rudi van Drunen     Anton Feenstra  
  Gerrit Groenhof    Aleksei Iupinov   Christoph Junghans   Anca Hamuraru   
 Vincent Hindriksen Dimitrios Karkoulis    Peter Kasson        Jiri Kraus    
  Carsten Kutzner      Per Larsson      Justin A. Lemkul    Viveca Lindahl  
  Magnus Lundborg   Pieter Meulenhoff    Erik Marklund      Teemu Murtola   
    Szilard Pall       Sander Pronk      Roland Schulz     Alexey Shvetsov  
   Michael Shirts     Alfons Sijbers     Peter Tieleman    Teemu Virolainen 
 Christian Wennberg    Maarten Wolf   
                           and the project leaders:
        Mark Abraham, Berk Hess, Erik Lindahl, and David van der Spoel

Copyright (c) 1991-2000, University of Groningen, The Netherlands.
Copyright (c) 2001-2017, The GROMACS development team at
Uppsala University, Stockholm University and
the Royal Institute of Technology, Sweden.
check out http://www.gromacs.org for more information.

GROMACS is free software; you can redistribute it and/or modify it
under the terms of the GNU Lesser General Public License
as published by the Free Software Foundation; either version 2.1
of the License, or (at your option) any later version.

GROMACS:      gmx grompp, version 2018.1
Executable:   /opt/apps/gromacs/2018.1-gnu-7.3-openmpi-2.1.1/bin/gmx
Data prefix:  /opt/apps/gromacs/2018.1-gnu-7.3-openmpi-2.1.1
Working dir:  /mnt/dat/work/testuser/indenter/sandbox/20191110_packmol
Command line:
  gmx grompp -f em_solvated.mdp -c solvated.gro -r solvated.gro -o em_solvated.tpr -p sys.top

Replacing old mdp entry 'nstxtcout' by 'nstxout-compressed'

NOTE 1 [file em_solvated.mdp]:
  With Verlet lists the optimal nstlist is >= 10, with GPUs >= 20. Note
  that with the Verlet scheme, nstlist has no effect on the accuracy of
  your simulation.

Setting the LD random seed to -1483206252
Generated 98320 of the 98346 non-bonded parameter combinations
Generating 1-4 interactions: fudge = 1
Generated 64935 of the 98346 1-4 parameter combinations
Excluding 3 bonded neighbours molecule type 'Substrate'
Excluding 3 bonded neighbours molecule type 'Surfactant'
Excluding 1 bonded neighbours molecule type 'NA'
Excluding 2 bonded neighbours molecule type 'SOL'
Removing all charge groups because cutoff-scheme=Verlet
Number of degrees of freedom in T-Coupling group rest is 485983.00
Estimate for the relative computational load of the PME mesh part: 0.19

There was 1 note

Back Off! I just backed up em_solvated.tpr to ./#em_solvated.tpr.1#

GROMACS reminds you: "All models are wrong, but some are useful." (George Box)


In [139]:
print(out)
turning H bonds into constraints...
turning H bonds into constraints...
turning H bonds into constraints...
turning H bonds into constraints...
Analysing residue names:
There are:  3873  Substrate residues
There are:   200 Surfactant residues
There are:   200        Ion residues
There are: 77531      Water residues
Analysing residues not classified as Protein/DNA/RNA/Water and splitting into groups...
Analysing residues not classified as Protein/DNA/RNA/Water and splitting into groups...
Analysing residues not classified as Protein/DNA/RNA/Water and splitting into groups...
Calculating fourier grid dimensions for X Y Z
Using a fourier grid of 120x120x120, spacing 0.113 0.113 0.113
This run will generate roughly 987 Mb of data

Remote file transfer

Utilize fabric to transfer files files to remote resource conveniently:

In [30]:
c = fabric.Connection('forhlr2') # host defined in ssh config
In [31]:
res = c.run('ws_find fw') # get remote directory of Fireworks workspace
INFO:paramiko.transport:Connected (version 2.0, client OpenSSH_7.4)
INFO:paramiko.transport:Authentication (publickey) successful!
/pfs/work6/workspace/scratch/fr_jh1130-fw-0
In [32]:
res.command
Out[32]:
'ws_find fw'
In [144]:
now = datetime.now().isoformat()
In [145]:
remote_path = os.path.sep.join((res.stdout.strip(),'file_transfer',now))
In [194]:
remote_path
Out[194]:
'/pfs/work6/workspace/scratch/fr_jh1130-fw-0/file_transfer/2019-12-01T19:06:17.131303'
In [147]:
res = c.run(' '.join(['mkdir','-p',remote_path]))
In [148]:
file_name = 'em_solvated.tpr'
In [188]:
local_file = os.path.sep.join((prefix,file_name))
In [189]:
remote_file = os.path.sep.join((remote_path,file_name))
In [198]:
res = c.put(local_file,remote_file)
In [200]:
res.local
Out[200]:
'/mnt/dat/work/testuser/indenter/sandbox/20191110_packmol/em_solvated.tpr'
In [193]:
# FileTransferTask does not work anymore
In [191]:
#ft = FileTransferTask(
#    mode   = 'rtransfer',
#    files  = [ {'src':local_file, 'dest':remote_path} ],
#    server = c.host,
#    user   = c.user )
In [192]:
#fw = Firework(
#    ft, 
#    name = 'BWCLOUD remote transef to FORHLR2',
#    spec = { 
#        '_category': 'bwcloud_std',
#        } )
In [174]:
fw_ids = lpad.add_wf(fw)
2019-12-01 19:22:25,477 INFO Added a workflow. id_map: {-9: 23406}
INFO:launchpad:Added a workflow. id_map: {-9: 23406}

Run energy minimization

In [239]:
ft = FileTransferTask(
    mode   = 'copy',
    files  = [ {'src':remote_file, 'dest':os.path.curdir} ] )
In [240]:
gmx_mdrun_task = CmdTask(
    cmd = 'gmx',
    opt = ['mdrun','-v','-deffnm','em_solvated'],
    stderr_file = 'std.err', 
    stdout_file = 'std.out', 
    use_shell = True)
In [241]:
gmx_log_tracker = Tracker('em_solvated.log')
In [242]:
gmx_mdrun_fw = Firework(
    [ft,gmx_mdrun_task], 
    name = 'FORHLR2 GMX mdrun em_solvated',
    spec = { 
        '_category': 'forhlr2_queue',
        '_queueadapter': {
            'cpus_per_task':    1,
            'ntasks_per_node':  20,
            'ntasks':           40,
            'queue':            'normal',
            'walltime':         '24:00'
        },
        '_files_out': {
            'log': '*.log',
            'trr': '*.trr',
            'edr': '*.edr',
            'gro': '*.gro' },
        '_trackers' : [ gmx_log_tracker ]
        } )
In [243]:
pprint(gmx_mdrun_fw.as_dict())
{'created_on': '2019-12-01T21:24:22.542072',
 'fw_id': -14,
 'name': 'FORHLR2 GMX mdrun em_solvated',
 'spec': {'_category': 'forhlr2_queue',
          '_files_out': {'edr': '*.edr',
                         'gro': '*.gro',
                         'log': '*.log',
                         'trr': '*.trr'},
          '_queueadapter': {'cpus_per_task': 1,
                            'ntasks': 40,
                            'ntasks_per_node': 20,
                            'queue': 'normal',
                            'walltime': '24:00'},
          '_tasks': [{'_fw_name': 'FileTransferTask',
                      'files': [{'dest': '.',
                                 'src': '/pfs/work6/workspace/scratch/fr_jh1130-fw-0/file_transfer/2019-12-01T19:06:17.131303/em_solvated.tpr'}],
                      'mode': 'copy'},
                     {'_fw_name': 'CmdTask',
                      'cmd': 'gmx',
                      'opt': ['mdrun', '-v', '-deffnm', 'em_solvated'],
                      'stderr_file': 'std.err',
                      'stdout_file': 'std.out',
                      'use_shell': True}],
          '_trackers': [{'allow_zipped': False,
                         'filename': 'em_solvated.log',
                         'nlines': 25}]},
 'updated_on': '2019-12-01T21:24:22.542079'}
In [244]:
fw_ids = lpad.add_wf(gmx_mdrun_fw)
2019-12-01 22:24:27,383 INFO Added a workflow. id_map: {-14: 23410}
INFO:launchpad:Added a workflow. id_map: {-14: 23410}
In [315]:
fw_id = list(fw_ids.values())[0]

File transfer back

instead of relying on the returned fw_id, we can also query the Firework added latest

In [23]:
fw_ids = lpad.get_fw_ids(sort=[('created_on',pymongo.DESCENDING)],limit=1)
In [25]:
fw_id = fw_ids[0]
In [34]:
fw_id
Out[34]:
23410

We query the remote directory our FireWork ran in

In [28]:
launch_dir = lpad.get_launchdir(fw_id)
In [35]:
launch_dir
Out[35]:
'/pfs/work6/workspace/scratch/fr_jh1130-fw-0/fireworks/launchpad/block_2019-12-01-19-01-57-874819/launcher_2019-12-01-21-24-34-734299'
In [30]:
c = fabric.Connection('forhlr2') # host defined in ssh config
In [36]:
res = c.run('ls -lht {}'.format(launch_dir)) # look at remote directory contents
total 473M
-rw-r--r-- 1 fr_jh1130 fh2-project-multilay 9.9K Dec  1 22:31 FORHLR2_GMX_mdrun_em-1644861.out
-rw-r--r-- 1 fr_jh1130 fh2-project-multilay 1.2K Dec  1 22:31 FW_offline.json
-rw-r--r-- 1 fr_jh1130 fh2-project-multilay   43 Dec  1 22:31 FW_ping.json
-rw-r--r-- 1 fr_jh1130 fh2-project-multilay 784K Dec  1 22:31 std.err
-rw-r--r-- 1 fr_jh1130 fh2-project-multilay    0 Dec  1 22:31 std.out
-rw-r--r-- 1 fr_jh1130 fh2-project-multilay 1.6M Dec  1 22:31 em_solvated.edr
-rw-r--r-- 1 fr_jh1130 fh2-project-multilay  11M Dec  1 22:31 em_solvated.gro
-rw-r--r-- 1 fr_jh1130 fh2-project-multilay 3.6M Dec  1 22:31 em_solvated.log
-rw-r--r-- 1 fr_jh1130 fh2-project-multilay 449M Dec  1 22:31 em_solvated.trr
-rw-r--r-- 1 fr_jh1130 fh2-project-multilay 6.9M Dec  1 22:25 em_solvated.tpr
-rw-r--r-- 1 fr_jh1130 fh2-project-multilay 4.2K Dec  1 22:25 FW.json
-rw-r--r-- 1 fr_jh1130 fh2-project-multilay    0 Dec  1 22:25 FORHLR2_GMX_mdrun_em-1644861.error
-rw-r--r-- 1 fr_jh1130 fh2-project-multilay  978 Dec  1 22:24 FW_submit.script
In [39]:
glob_pattern = os.path.join(launch_dir,'em_solvated.*')
In [49]:
res = c.run('ls {}'.format(glob_pattern))
/pfs/work6/workspace/scratch/fr_jh1130-fw-0/fireworks/launchpad/block_2019-12-01-19-01-57-874819/launcher_2019-12-01-21-24-34-734299/em_solvated.edr
/pfs/work6/workspace/scratch/fr_jh1130-fw-0/fireworks/launchpad/block_2019-12-01-19-01-57-874819/launcher_2019-12-01-21-24-34-734299/em_solvated.gro
/pfs/work6/workspace/scratch/fr_jh1130-fw-0/fireworks/launchpad/block_2019-12-01-19-01-57-874819/launcher_2019-12-01-21-24-34-734299/em_solvated.log
/pfs/work6/workspace/scratch/fr_jh1130-fw-0/fireworks/launchpad/block_2019-12-01-19-01-57-874819/launcher_2019-12-01-21-24-34-734299/em_solvated.tpr
/pfs/work6/workspace/scratch/fr_jh1130-fw-0/fireworks/launchpad/block_2019-12-01-19-01-57-874819/launcher_2019-12-01-21-24-34-734299/em_solvated.trr
In [53]:
res.stdout
Out[53]:
'/pfs/work6/workspace/scratch/fr_jh1130-fw-0/fireworks/launchpad/block_2019-12-01-19-01-57-874819/launcher_2019-12-01-21-24-34-734299/em_solvated.edr\n/pfs/work6/workspace/scratch/fr_jh1130-fw-0/fireworks/launchpad/block_2019-12-01-19-01-57-874819/launcher_2019-12-01-21-24-34-734299/em_solvated.gro\n/pfs/work6/workspace/scratch/fr_jh1130-fw-0/fireworks/launchpad/block_2019-12-01-19-01-57-874819/launcher_2019-12-01-21-24-34-734299/em_solvated.log\n/pfs/work6/workspace/scratch/fr_jh1130-fw-0/fireworks/launchpad/block_2019-12-01-19-01-57-874819/launcher_2019-12-01-21-24-34-734299/em_solvated.tpr\n/pfs/work6/workspace/scratch/fr_jh1130-fw-0/fireworks/launchpad/block_2019-12-01-19-01-57-874819/launcher_2019-12-01-21-24-34-734299/em_solvated.trr\n'
In [57]:
for f in res.stdout.splitlines():
    c.get(f)

Energy minimization analysis

In [97]:
em_file = 'em_solvated.edr'
In [98]:
em_df = panedr.edr_to_df(em_file)
In [99]:
em_df.columns
Out[99]:
Index(['Time', 'Bond', 'U-B', 'Proper Dih.', 'LJ-14', 'Coulomb-14', 'LJ (SR)',
       'Coulomb (SR)', 'Coul. recip.', 'Position Rest.', 'Potential',
       'Pressure', 'Constr. rmsd', 'Vir-XX', 'Vir-XY', 'Vir-XZ', 'Vir-YX',
       'Vir-YY', 'Vir-YZ', 'Vir-ZX', 'Vir-ZY', 'Vir-ZZ', 'Pres-XX', 'Pres-XY',
       'Pres-XZ', 'Pres-YX', 'Pres-YY', 'Pres-YZ', 'Pres-ZX', 'Pres-ZY',
       'Pres-ZZ', '#Surf*SurfTen', 'T-rest'],
      dtype='object')
In [100]:
fig, ax = plt.subplots(3,2,figsize=(10,12))
em_df.plot('Time','Potential',ax=ax[0,0])
em_df.plot('Time','Pressure',ax=ax[0,1])
em_df.plot('Time','Bond',ax=ax[1,0])
em_df.plot('Time','Position Rest.',ax=ax[1,1])
#em_df.plot('Time','COM Pull En.',ax=ax[1,1])
em_df.plot('Time','Coulomb (SR)',ax=ax[2,0])
em_df.plot('Time','Coul. recip.',ax=ax[2,1])
Out[100]:
<matplotlib.axes._subplots.AxesSubplot at 0x7ff16de57fd0>
In [173]:
try:
    del em_df
except:
    pass

Visualize trajectory

In [102]:
mda_trr = mda.Universe('solvated.gro','em_solvated.trr')
/opt/apps/mdtools/jlh-11Jul19/lib/python3.6/site-packages/MDAnalysis/topology/guessers.py:80: UserWarning: Failed to guess the mass for the following atom types: A
  warnings.warn("Failed to guess the mass for the following atom types: {}".format(atom_type))
In [103]:
# check unique resiude names in system
resnames = np.unique([ r.resname for r in mda_trr.residues ])
In [104]:
resnames
Out[104]:
array(['AUM', 'NA', 'SDS', 'SOL'], dtype='<U3')
In [117]:
mda_view = nglview.show_mdanalysis(mda_trr)
mda_view.clear_representations()
mda_view.background = 'white'
mda_view.add_representation(repr_type='ball+stick',selection='SDS')
mda_view.add_representation(repr_type='ball+stick',selection='NA')
mda_view.add_representation(repr_type='spacefill',selection='AUM',color='yellow')
mda_view.center()
In [118]:
mda_view
In [159]:
try:
    del mda_trr
except:
    pass
try:
    del mda_view
except:
    pass

NVT equilibration

In [134]:
top = 'sys.top'
gro = 'em_solvated.gro'
ndx = 'nvt.ndx'
In [133]:
lpad = LaunchPad.auto_load()

Generate non-substrate index group

In [141]:
pmd_top_gro = pmd.gromacs.GromacsTopologyFile(top)

pmd_gro = pmd.gromacs.GromacsGroFile.parse(gro)
pmd_top_gro.box = pmd_gro.box
pmd_top_gro.positions = pmd_gro.positions
In [142]:
non_substrate_ndx = np.array([
        i+1 for i,a in enumerate(pmd_top_gro.atoms) if a.residue.name != 'AUM' ])
# gromacs ndx starts at 1

len(pmd_top_gro.atoms)

In [144]:
len(non_substrate_ndx)
Out[144]:
241193
In [147]:
len(pmd_top_gro.atoms) - len(non_substrate_ndx) # double-check non-substrate and substrate atom numbers
Out[147]:
3873
In [160]:
try:
    del pmd_top_gro
except:
    pass
try:
    del pmd_gro
except:
    pass

Generate standard index file for system

In [135]:
gmx_make_ndx = gromacs.make_ndx.Popen(
    f=gro,o=ndx,
    input='q',
    stdout=subprocess.PIPE,stderr=subprocess.PIPE)
In [136]:
out_str, err_str = gmx_make_ndx.communicate()
In [137]:
print(out_str)
Going to read 0 old index file(s)
Analysing residue names:
There are:  3873  Substrate residues
There are:   200 Surfactant residues
There are:   200        Ion residues
There are: 77531      Water residues
Analysing residues not classified as Protein/DNA/RNA/Water and splitting into groups...
Analysing residues not classified as Protein/DNA/RNA/Water and splitting into groups...
Analysing residues not classified as Protein/DNA/RNA/Water and splitting into groups...

  0 System              : 245066 atoms
  1 Substrate           :  3873 atoms
  2 AUM                 :  3873 atoms
  3 SDS                 :  8400 atoms
  4 NA                  :   200 atoms
  5 Surfactant          :  8400 atoms
  6 AUM                 :  3873 atoms
  7 SDS                 :  8400 atoms
  8 NA                  :   200 atoms
  9 Ion                 :   200 atoms
 10 AUM                 :  3873 atoms
 11 SDS                 :  8400 atoms
 12 NA                  :   200 atoms
 13 Water               : 232593 atoms
 14 SOL                 : 232593 atoms
 15 non-Water           : 12473 atoms
 16 Water_and_ions      : 232793 atoms

 nr : group      '!': not  'name' nr name   'splitch' nr    Enter: list groups
 'a': atom       '&': and  'del' nr         'splitres' nr   'l': list residues
 't': atom type  '|': or   'keep' nr        'splitat' nr    'h': help
 'r': residue              'res' nr         'chain' char
 "name": group             'case': case sensitive           'q': save and quit
 'ri': residue index

> 

In [138]:
print(err_str)
libgomp: Invalid value for environment variable OMP_NUM_THREADS
                     :-) GROMACS - gmx make_ndx, 2018.1 (-:

                            GROMACS is written by:
     Emile Apol      Rossen Apostolov      Paul Bauer     Herman J.C. Berendsen
    Par Bjelkmar    Aldert van Buuren   Rudi van Drunen     Anton Feenstra  
  Gerrit Groenhof    Aleksei Iupinov   Christoph Junghans   Anca Hamuraru   
 Vincent Hindriksen Dimitrios Karkoulis    Peter Kasson        Jiri Kraus    
  Carsten Kutzner      Per Larsson      Justin A. Lemkul    Viveca Lindahl  
  Magnus Lundborg   Pieter Meulenhoff    Erik Marklund      Teemu Murtola   
    Szilard Pall       Sander Pronk      Roland Schulz     Alexey Shvetsov  
   Michael Shirts     Alfons Sijbers     Peter Tieleman    Teemu Virolainen 
 Christian Wennberg    Maarten Wolf   
                           and the project leaders:
        Mark Abraham, Berk Hess, Erik Lindahl, and David van der Spoel

Copyright (c) 1991-2000, University of Groningen, The Netherlands.
Copyright (c) 2001-2017, The GROMACS development team at
Uppsala University, Stockholm University and
the Royal Institute of Technology, Sweden.
check out http://www.gromacs.org for more information.

GROMACS is free software; you can redistribute it and/or modify it
under the terms of the GNU Lesser General Public License
as published by the Free Software Foundation; either version 2.1
of the License, or (at your option) any later version.

GROMACS:      gmx make_ndx, version 2018.1
Executable:   /opt/apps/gromacs/2018.1-gnu-7.3-openmpi-2.1.1/bin/gmx
Data prefix:  /opt/apps/gromacs/2018.1-gnu-7.3-openmpi-2.1.1
Working dir:  /mnt/dat/work/testuser/indenter/sandbox/20191110_packmol
Command line:
  gmx make_ndx -f em_solvated.gro -o nvt.ndx


Reading structure file

GROMACS reminds you: "I Had So Many Problem, and Then I Got Me a Walkman" (F. Black)


Enhance standard index file by pulling groups

In [150]:
ndx_in = gromacs.fileformats.NDX(ndx)
In [152]:
ndx_in['non-Substrate'] = non_substrate_ndx
In [155]:
ndx_in.write(ndx)
In [175]:
try:
    del ndx_in
except:
    pass
try:
    del non_substrate_ndx
except:
    pass

Compile system

In [183]:
gmx_grompp = gromacs.grompp.Popen(
    f='nvt.mdp',n=ndx,c=gro,r=gro,o='nvt.tpr',p=top,
    stdout=subprocess.PIPE,stderr=subprocess.PIPE)

out = gmx_grompp.stdout.read()
err = gmx_grompp.stderr.read()
In [184]:
print(err)
libgomp: Invalid value for environment variable OMP_NUM_THREADS
                      :-) GROMACS - gmx grompp, 2018.1 (-:

                            GROMACS is written by:
     Emile Apol      Rossen Apostolov      Paul Bauer     Herman J.C. Berendsen
    Par Bjelkmar    Aldert van Buuren   Rudi van Drunen     Anton Feenstra  
  Gerrit Groenhof    Aleksei Iupinov   Christoph Junghans   Anca Hamuraru   
 Vincent Hindriksen Dimitrios Karkoulis    Peter Kasson        Jiri Kraus    
  Carsten Kutzner      Per Larsson      Justin A. Lemkul    Viveca Lindahl  
  Magnus Lundborg   Pieter Meulenhoff    Erik Marklund      Teemu Murtola   
    Szilard Pall       Sander Pronk      Roland Schulz     Alexey Shvetsov  
   Michael Shirts     Alfons Sijbers     Peter Tieleman    Teemu Virolainen 
 Christian Wennberg    Maarten Wolf   
                           and the project leaders:
        Mark Abraham, Berk Hess, Erik Lindahl, and David van der Spoel

Copyright (c) 1991-2000, University of Groningen, The Netherlands.
Copyright (c) 2001-2017, The GROMACS development team at
Uppsala University, Stockholm University and
the Royal Institute of Technology, Sweden.
check out http://www.gromacs.org for more information.

GROMACS is free software; you can redistribute it and/or modify it
under the terms of the GNU Lesser General Public License
as published by the Free Software Foundation; either version 2.1
of the License, or (at your option) any later version.

GROMACS:      gmx grompp, version 2018.1
Executable:   /opt/apps/gromacs/2018.1-gnu-7.3-openmpi-2.1.1/bin/gmx
Data prefix:  /opt/apps/gromacs/2018.1-gnu-7.3-openmpi-2.1.1
Working dir:  /mnt/dat/work/testuser/indenter/sandbox/20191110_packmol
Command line:
  gmx grompp -f nvt.mdp -n nvt.ndx -c em_solvated.gro -r em_solvated.gro -o nvt.tpr -p sys.top

Ignoring obsolete mdp entry 'title'
Replacing old mdp entry 'nstxtcout' by 'nstxout-compressed'
Setting the LD random seed to 1353336602
Generated 98320 of the 98346 non-bonded parameter combinations
Generating 1-4 interactions: fudge = 1
Generated 64935 of the 98346 1-4 parameter combinations
Excluding 3 bonded neighbours molecule type 'Substrate'
Excluding 3 bonded neighbours molecule type 'Surfactant'
Excluding 1 bonded neighbours molecule type 'NA'
Excluding 2 bonded neighbours molecule type 'SOL'
Setting gen_seed to 680823278
Velocities were taken from a Maxwell distribution at 298.15 K
Removing all charge groups because cutoff-scheme=Verlet
Number of degrees of freedom in T-Coupling group non-Substrate is 485983.00
Number of degrees of freedom in T-Coupling group Substrate is 0.00
Estimate for the relative computational load of the PME mesh part: 0.16

GROMACS reminds you: "What Kind Of Guru are You, Anyway ?" (F. Zappa)


In [185]:
print(out)
turning H bonds into constraints...
turning H bonds into constraints...
turning H bonds into constraints...
turning H bonds into constraints...
Determining Verlet buffer for a tolerance of 0.005 kJ/mol/ps at 298.15 K
Calculated rlist for 1x1 atom pair-list as 1.233 nm, buffer size 0.033 nm
Set rlist, assuming 4x4 atom pair-list, to 1.200 nm, buffer size 0.000 nm
Note that mdrun will redetermine rlist based on the actual pair-list setup
Calculating fourier grid dimensions for X Y Z
Using a fourier grid of 96x96x96, spacing 0.141 0.141 0.141
This run will generate roughly 987 Mb of data

Remote file transfer

Utilize fabric to transfer files files to remote resource conveniently:

In [279]:
c = fabric.Connection('forhlr2') # host defined in ssh config
In [280]:
res = c.run('ws_find fw') # get remote directory of Fireworks workspace
INFO:paramiko.transport:Connected (version 2.0, client OpenSSH_7.4)
INFO:paramiko.transport:Authentication (publickey) successful!
/pfs/work6/workspace/scratch/fr_jh1130-fw-0
In [281]:
res.command
Out[281]:
'ws_find fw'
In [282]:
now = datetime.now().isoformat()
In [283]:
remote_path = os.path.sep.join((res.stdout.strip(),'file_transfer',now))
In [191]:
remote_path
Out[191]:
'/pfs/work6/workspace/scratch/fr_jh1130-fw-0/file_transfer/2019-12-05T19:10:15.437758'
In [192]:
res = c.run(' '.join(['mkdir','-p',remote_path]))
In [193]:
file_name = 'nvt.tpr'
In [194]:
local_file = os.path.sep.join((prefix,file_name))
In [195]:
remote_file = os.path.sep.join((remote_path,file_name))
In [196]:
res = c.put(local_file,remote_file)
INFO:paramiko.transport.sftp:[chan 2] Opened sftp connection (server version 3)
In [197]:
res.local
Out[197]:
'/mnt/dat/work/testuser/indenter/sandbox/20191110_packmol/nvt.tpr'

Execute trial task via Fireworks on remote resource queue

In [317]:
ft = FileTransferTask(
    mode   = 'copy',
    files  = [ {'src':remote_file, 'dest':os.path.curdir} ] )
In [318]:
gmx_mdrun_task = CmdTask(
    cmd = 'gmx',
    opt = ['mdrun','-v','-deffnm','nvt'],
    stderr_file = 'std.err', 
    stdout_file = 'std.out', 
    use_shell = True)
In [319]:
gmx_log_tracker = Tracker('nvt.log')
In [320]:
gmx_mdrun_fw = Firework(
    [ft,gmx_mdrun_task], 
    name = 'FORHLR2 GMX mdrun nvt',
    spec = { 
        '_category': 'forhlr2_queue',
        '_queueadapter': {
            'cpus_per_task':    1,
            'ntasks_per_node':  20,
            'ntasks':           20,
            'queue':            'develop',
            'walltime':         '00:03:00'
        },
        '_files_out': {
            'log': '*.log',
            'trr': '*.trr',
            'edr': '*.edr',
            'gro': '*.gro' },
        '_trackers' : [ gmx_log_tracker ]
        } )
In [321]:
pprint(gmx_mdrun_fw.as_dict())
{'created_on': '2019-12-05T23:24:06.054207',
 'fw_id': -15,
 'name': 'FORHLR2 GMX mdrun nvt',
 'spec': {'_category': 'forhlr2_queue',
          '_files_out': {'edr': '*.edr',
                         'gro': '*.gro',
                         'log': '*.log',
                         'trr': '*.trr'},
          '_queueadapter': {'cpus_per_task': 1,
                            'ntasks': 20,
                            'ntasks_per_node': 20,
                            'queue': 'develop',
                            'walltime': '00:03:00'},
          '_tasks': [{'_fw_name': 'FileTransferTask',
                      'files': [{'dest': '.',
                                 'src': '/pfs/work6/workspace/scratch/fr_jh1130-fw-0/file_transfer/2019-12-05T19:10:15.437758/nvt.tpr'}],
                      'mode': 'copy'},
                     {'_fw_name': 'CmdTask',
                      'cmd': 'gmx',
                      'opt': ['mdrun', '-v', '-deffnm', 'nvt'],
                      'stderr_file': 'std.err',
                      'stdout_file': 'std.out',
                      'use_shell': True}],
          '_trackers': [{'allow_zipped': False,
                         'filename': 'nvt.log',
                         'nlines': 25}]},
 'updated_on': '2019-12-05T23:24:06.054208'}
In [322]:
fw_ids = lpad.add_wf(gmx_mdrun_fw)
2019-12-06 00:24:07,219 INFO Added a workflow. id_map: {-15: 23425}
INFO:launchpad:Added a workflow. id_map: {-15: 23425}
In [332]:
fw_ids = lpad.get_fw_ids(query={'name':'FORHLR2 GMX mdrun nvt','spec._queueadapter.queue':'develop'})
In [333]:
for fw_id in fw_ids:
    try:
        print("Deleting {}...".format(fw_id))
        lpad.delete_wf(fw_id)
    except:
        print("Failed deleting {}...".format(fw_id))
    
Deleting 23412...
Remove fws [23412]
Remove launches [18839]
Removing workflow.
Deleting 23413...
Remove fws [23413]
Remove launches [18840]
Removing workflow.
Deleting 23414...
Remove fws [23414]
Remove launches [18843, 18841, 18842]
Removing workflow.
Deleting 23415...
Remove fws [23415]
Remove launches [18844]
Removing workflow.
Deleting 23416...
Remove fws [23416]
Remove launches [18856, 18845, 18846, 18847, 18848, 18849, 18850, 18851, 18852, 18853, 18854, 18855]
Removing workflow.
Deleting 23417...
Remove fws [23417]
Remove launches [18857]
Removing workflow.
Deleting 23418...
Remove fws [23418]
Remove launches [18861, 18858, 18859, 18860]
Removing workflow.
Deleting 23419...
Remove fws [23419]
Remove launches [18866, 18862, 18863, 18864, 18865]
Removing workflow.
Deleting 23420...
Remove fws [23420]
Remove launches [18867]
Removing workflow.
Deleting 23421...
Remove fws [23421]
Remove launches [18868]
Removing workflow.
Deleting 23422...
Remove fws [23422]
Remove launches [18869]
Removing workflow.
Deleting 23423...
Remove fws [23423]
Remove launches [18870]
Removing workflow.
Deleting 23424...
Remove fws [23424]
Remove launches [18871]
Removing workflow.
Deleting 23425...
Remove fws [23425]
Remove launches [18872]
Removing workflow.

Run NVT equilibration

In [198]:
ft = FileTransferTask(
    mode   = 'copy',
    files  = [ {'src':remote_file, 'dest':os.path.curdir} ] )
In [199]:
gmx_mdrun_task = CmdTask(
    cmd = 'gmx',
    opt = ['mdrun','-v','-deffnm','nvt'],
    stderr_file = 'std.err', 
    stdout_file = 'std.out', 
    use_shell = True)
In [200]:
gmx_log_tracker = Tracker('nvt.log')
In [201]:
gmx_mdrun_fw = Firework(
    [ft,gmx_mdrun_task], 
    name = 'FORHLR2 GMX mdrun nvt',
    spec = { 
        '_category': 'forhlr2_queue',
        '_queueadapter': {
            'cpus_per_task':    1,
            'ntasks_per_node':  20,
            'ntasks':           40,
            'queue':            'normal',
            'walltime':         '24:00'
        },
        '_files_out': {
            'log': '*.log',
            'trr': '*.trr',
            'edr': '*.edr',
            'gro': '*.gro' },
        '_trackers' : [ gmx_log_tracker ]
        } )
In [202]:
pprint(gmx_mdrun_fw.as_dict())
{'created_on': '2019-12-05T18:11:31.443409',
 'fw_id': -1,
 'name': 'FORHLR2 GMX mdrun nvt',
 'spec': {'_category': 'forhlr2_queue',
          '_files_out': {'edr': '*.edr',
                         'gro': '*.gro',
                         'log': '*.log',
                         'trr': '*.trr'},
          '_queueadapter': {'cpus_per_task': 1,
                            'ntasks': 40,
                            'ntasks_per_node': 20,
                            'queue': 'normal',
                            'walltime': '24:00'},
          '_tasks': [{'_fw_name': 'FileTransferTask',
                      'files': [{'dest': '.',
                                 'src': '/pfs/work6/workspace/scratch/fr_jh1130-fw-0/file_transfer/2019-12-05T19:10:15.437758/nvt.tpr'}],
                      'mode': 'copy'},
                     {'_fw_name': 'CmdTask',
                      'cmd': 'gmx',
                      'opt': ['mdrun', '-v', '-deffnm', 'nvt'],
                      'stderr_file': 'std.err',
                      'stdout_file': 'std.out',
                      'use_shell': True}],
          '_trackers': [{'allow_zipped': False,
                         'filename': 'nvt.log',
                         'nlines': 25}]},
 'updated_on': '2019-12-05T18:11:31.443413'}
In [203]:
fw_ids = lpad.add_wf(gmx_mdrun_fw)
2019-12-05 19:11:36,305 INFO Added a workflow. id_map: {-1: 23411}
INFO:launchpad:Added a workflow. id_map: {-1: 23411}
In [204]:
fw_id = list(fw_ids.values())[0]

File transfer back

instead of relying on the returned fw_id, we can also query the Firework added latest

In [205]:
fw_ids = lpad.get_fw_ids(sort=[('created_on',pymongo.DESCENDING)],limit=1)
In [206]:
fw_id = fw_ids[0]
In [207]:
fw_id
Out[207]:
23411

We query the remote directory our FireWork ran in

In [208]:
launch_dir = lpad.get_launchdir(fw_id)
In [209]:
launch_dir
Out[209]:
'/pfs/work6/workspace/scratch/fr_jh1130-fw-0/fireworks/launchpad/block_2019-12-01-19-01-57-874819/launcher_2019-12-05-18-11-38-519130'
In [210]:
c = fabric.Connection('forhlr2') # host defined in ssh config
In [211]:
res = c.run('ls -lht {}'.format(launch_dir)) # look at remote directory contents
INFO:paramiko.transport:Connected (version 2.0, client OpenSSH_7.4)
INFO:paramiko.transport:Authentication (publickey) successful!
total 969M
-rw-r--r-- 1 fr_jh1130 fh2-project-multilay 7.8K Dec  5 19:28 FORHLR2_GMX_mdrun_nv-1648573.out
-rw-r--r-- 1 fr_jh1130 fh2-project-multilay 1.2K Dec  5 19:28 FW_offline.json
-rw-r--r-- 1 fr_jh1130 fh2-project-multilay   43 Dec  5 19:28 FW_ping.json
-rw-r--r-- 1 fr_jh1130 fh2-project-multilay  53K Dec  5 19:28 nvt.edr
-rw-r--r-- 1 fr_jh1130 fh2-project-multilay  17M Dec  5 19:28 nvt.gro
-rw-r--r-- 1 fr_jh1130 fh2-project-multilay  82K Dec  5 19:28 nvt.log
-rw-r--r-- 1 fr_jh1130 fh2-project-multilay  32K Dec  5 19:28 std.err
-rw-r--r-- 1 fr_jh1130 fh2-project-multilay    0 Dec  5 19:28 std.out
-rw-r--r-- 1 fr_jh1130 fh2-project-multilay 5.7M Dec  5 19:28 nvt.cpt
-rw-r--r-- 1 fr_jh1130 fh2-project-multilay 850M Dec  5 19:28 nvt.trr
-rw-r--r-- 1 fr_jh1130 fh2-project-multilay  90M Dec  5 19:28 nvt.xtc
-rw-r--r-- 1 fr_jh1130 fh2-project-multilay 4.2K Dec  5 19:14 FW.json
-rw-r--r-- 1 fr_jh1130 fh2-project-multilay 7.7M Dec  5 19:14 nvt.tpr
-rw-r--r-- 1 fr_jh1130 fh2-project-multilay   90 Dec  5 19:14 FORHLR2_GMX_mdrun_nv-1648573.error
-rw-r--r-- 1 fr_jh1130 fh2-project-multilay  978 Dec  5 19:11 FW_submit.script
In [213]:
glob_pattern = os.path.join(launch_dir,'nvt.*')
In [214]:
res = c.run('ls {}'.format(glob_pattern))
/pfs/work6/workspace/scratch/fr_jh1130-fw-0/fireworks/launchpad/block_2019-12-01-19-01-57-874819/launcher_2019-12-05-18-11-38-519130/nvt.cpt
/pfs/work6/workspace/scratch/fr_jh1130-fw-0/fireworks/launchpad/block_2019-12-01-19-01-57-874819/launcher_2019-12-05-18-11-38-519130/nvt.edr
/pfs/work6/workspace/scratch/fr_jh1130-fw-0/fireworks/launchpad/block_2019-12-01-19-01-57-874819/launcher_2019-12-05-18-11-38-519130/nvt.gro
/pfs/work6/workspace/scratch/fr_jh1130-fw-0/fireworks/launchpad/block_2019-12-01-19-01-57-874819/launcher_2019-12-05-18-11-38-519130/nvt.log
/pfs/work6/workspace/scratch/fr_jh1130-fw-0/fireworks/launchpad/block_2019-12-01-19-01-57-874819/launcher_2019-12-05-18-11-38-519130/nvt.tpr
/pfs/work6/workspace/scratch/fr_jh1130-fw-0/fireworks/launchpad/block_2019-12-01-19-01-57-874819/launcher_2019-12-05-18-11-38-519130/nvt.trr
/pfs/work6/workspace/scratch/fr_jh1130-fw-0/fireworks/launchpad/block_2019-12-01-19-01-57-874819/launcher_2019-12-05-18-11-38-519130/nvt.xtc
In [215]:
for f in res.stdout.splitlines():
    c.get(f)
INFO:paramiko.transport.sftp:[chan 2] Opened sftp connection (server version 3)

Analysis

In [242]:
edr_file = 'nvt.edr'
In [243]:
edr_df = panedr.edr_to_df(edr_file)
In [244]:
edr_df.columns
Out[244]:
Index(['Time', 'Bond', 'U-B', 'Proper Dih.', 'LJ-14', 'Coulomb-14', 'LJ (SR)',
       'Coulomb (SR)', 'Coul. recip.', 'Potential', 'Kinetic En.',
       'Total Energy', 'Conserved En.', 'Temperature', 'Pressure',
       'Constr. rmsd', 'Vir-XX', 'Vir-XY', 'Vir-XZ', 'Vir-YX', 'Vir-YY',
       'Vir-YZ', 'Vir-ZX', 'Vir-ZY', 'Vir-ZZ', 'Pres-XX', 'Pres-XY', 'Pres-XZ',
       'Pres-YX', 'Pres-YY', 'Pres-YZ', 'Pres-ZX', 'Pres-ZY', 'Pres-ZZ',
       '#Surf*SurfTen', 'T-non-Substrate', 'T-Substrate', 'Lamb-non-Substrate',
       'Lamb-Substrate'],
      dtype='object')
In [248]:
fig, ax = plt.subplots(3,2,figsize=(10,12))
edr_df.plot('Time','Temperature',ax=ax[0,0])
edr_df.plot('Time','Pressure',ax=ax[0,1])
edr_df.plot('Time','Potential',ax=ax[1,0])
edr_df.plot('Time','Bond',ax=ax[1,1])
#edr_df.plot('Time','Position Rest.',ax=ax[1,1])
#edr_df.plot('Time','COM Pull En.',ax=ax[1,1])
edr_df.plot('Time','Coulomb (SR)',ax=ax[2,0])
edr_df.plot('Time','Coul. recip.',ax=ax[2,1])
Out[248]:
<matplotlib.axes._subplots.AxesSubplot at 0x7ff167176f60>

Visualize trajectory

In [102]:
mda_trr = mda.Universe('solvated.gro','em_solvated.trr')
/opt/apps/mdtools/jlh-11Jul19/lib/python3.6/site-packages/MDAnalysis/topology/guessers.py:80: UserWarning: Failed to guess the mass for the following atom types: A
  warnings.warn("Failed to guess the mass for the following atom types: {}".format(atom_type))
In [103]:
# check unique resiude names in system
resnames = np.unique([ r.resname for r in mda_trr.residues ])
In [104]:
resnames
Out[104]:
array(['AUM', 'NA', 'SDS', 'SOL'], dtype='<U3')
In [117]:
mda_view = nglview.show_mdanalysis(mda_trr)
mda_view.clear_representations()
mda_view.background = 'white'
mda_view.add_representation(repr_type='ball+stick',selection='SDS')
mda_view.add_representation(repr_type='ball+stick',selection='NA')
mda_view.add_representation(repr_type='spacefill',selection='AUM',color='yellow')
mda_view.center()
In [118]:
mda_view
In [119]:
try:
    del mda_trr
except:
    pass
try:
    del mda_view
except:
    pass

NPT equilibration

In [110]:
top = 'sys.top'
gro = 'nvt.gro'
ndx = 'nvt.ndx'
In [111]:
lpad = LaunchPad.auto_load()

Compile system

In [117]:
gmx_grompp = gromacs.grompp.Popen(
    f='npt.mdp',n=ndx,c=gro,r=gro,o='npt.tpr',p=top,
    stdout=subprocess.PIPE,stderr=subprocess.PIPE)

out = gmx_grompp.stdout.read()
err = gmx_grompp.stderr.read()
In [118]:
print(err)
libgomp: Invalid value for environment variable OMP_NUM_THREADS
                      :-) GROMACS - gmx grompp, 2018.1 (-:

                            GROMACS is written by:
     Emile Apol      Rossen Apostolov      Paul Bauer     Herman J.C. Berendsen
    Par Bjelkmar    Aldert van Buuren   Rudi van Drunen     Anton Feenstra  
  Gerrit Groenhof    Aleksei Iupinov   Christoph Junghans   Anca Hamuraru   
 Vincent Hindriksen Dimitrios Karkoulis    Peter Kasson        Jiri Kraus    
  Carsten Kutzner      Per Larsson      Justin A. Lemkul    Viveca Lindahl  
  Magnus Lundborg   Pieter Meulenhoff    Erik Marklund      Teemu Murtola   
    Szilard Pall       Sander Pronk      Roland Schulz     Alexey Shvetsov  
   Michael Shirts     Alfons Sijbers     Peter Tieleman    Teemu Virolainen 
 Christian Wennberg    Maarten Wolf   
                           and the project leaders:
        Mark Abraham, Berk Hess, Erik Lindahl, and David van der Spoel

Copyright (c) 1991-2000, University of Groningen, The Netherlands.
Copyright (c) 2001-2017, The GROMACS development team at
Uppsala University, Stockholm University and
the Royal Institute of Technology, Sweden.
check out http://www.gromacs.org for more information.

GROMACS is free software; you can redistribute it and/or modify it
under the terms of the GNU Lesser General Public License
as published by the Free Software Foundation; either version 2.1
of the License, or (at your option) any later version.

GROMACS:      gmx grompp, version 2018.1
Executable:   /opt/apps/gromacs/2018.1-gnu-7.3-openmpi-2.1.1/bin/gmx
Data prefix:  /opt/apps/gromacs/2018.1-gnu-7.3-openmpi-2.1.1
Working dir:  /mnt/dat/work/testuser/indenter/sandbox/20191110_packmol
Command line:
  gmx grompp -f npt.mdp -n nvt.ndx -c nvt.gro -r nvt.gro -o npt.tpr -p sys.top

Ignoring obsolete mdp entry 'title'
Replacing old mdp entry 'nstxtcout' by 'nstxout-compressed'
Setting the LD random seed to -331738581
Generated 98320 of the 98346 non-bonded parameter combinations
Generating 1-4 interactions: fudge = 1
Generated 64935 of the 98346 1-4 parameter combinations
Excluding 3 bonded neighbours molecule type 'Substrate'
Excluding 3 bonded neighbours molecule type 'Surfactant'
Excluding 1 bonded neighbours molecule type 'NA'
Excluding 2 bonded neighbours molecule type 'SOL'
Removing all charge groups because cutoff-scheme=Verlet
Number of degrees of freedom in T-Coupling group non-Substrate is 485983.00
Number of degrees of freedom in T-Coupling group Substrate is 0.00
Estimate for the relative computational load of the PME mesh part: 0.16

Back Off! I just backed up npt.tpr to ./#npt.tpr.3#

GROMACS reminds you: "If it's a good idea, go ahead and do it. It's much easier to apologize than it is to get permission." (Grace Hopper, developer of COBOL)


In [119]:
print(out)
turning H bonds into constraints...
turning H bonds into constraints...
turning H bonds into constraints...
turning H bonds into constraints...
Determining Verlet buffer for a tolerance of 0.005 kJ/mol/ps at 298.15 K
Calculated rlist for 1x1 atom pair-list as 1.233 nm, buffer size 0.033 nm
Set rlist, assuming 4x4 atom pair-list, to 1.200 nm, buffer size 0.000 nm
Note that mdrun will redetermine rlist based on the actual pair-list setup
Calculating fourier grid dimensions for X Y Z
Using a fourier grid of 96x96x96, spacing 0.141 0.141 0.141
This run will generate roughly 987 Mb of data

Remote file transfer

Utilize fabric to transfer files files to remote resource conveniently:

In [120]:
c = fabric.Connection('forhlr2') # host defined in ssh config
In [121]:
res = c.run('ws_find fw') # get remote directory of Fireworks workspace
INFO:paramiko.transport:Connected (version 2.0, client OpenSSH_7.4)
INFO:paramiko.transport:Authentication (publickey) successful!
/pfs/work6/workspace/scratch/fr_jh1130-fw-0
In [122]:
res.command
Out[122]:
'ws_find fw'
In [123]:
now = datetime.now().isoformat()
In [124]:
remote_path = os.path.sep.join((res.stdout.strip(),'file_transfer',now))
In [125]:
remote_path
Out[125]:
'/pfs/work6/workspace/scratch/fr_jh1130-fw-0/file_transfer/2019-12-11T19:09:18.744250'
In [126]:
res = c.run(' '.join(['mkdir','-p',remote_path]))
In [127]:
file_name = 'npt.tpr'
In [128]:
local_file = os.path.sep.join((prefix,file_name))
In [129]:
remote_file = os.path.sep.join((remote_path,file_name))
In [130]:
res = c.put(local_file,remote_file)
INFO:paramiko.transport.sftp:[chan 2] Opened sftp connection (server version 3)

Run NPT equilibration

In [131]:
ft = FileTransferTask(
    mode   = 'copy',
    files  = [ {'src':remote_file, 'dest':os.path.curdir} ] )
In [132]:
gmx_mdrun_task = CmdTask(
    cmd = 'gmx',
    opt = ['mdrun','-v','-deffnm','npt'],
    stderr_file = 'std.err', 
    stdout_file = 'std.out', 
    use_shell = True)
In [133]:
gmx_log_tracker = Tracker('npt.log')
In [134]:
gmx_mdrun_fw = Firework(
    [ft,gmx_mdrun_task], 
    name = 'FORHLR2 GMX mdrun npt',
    spec = { 
        '_category': 'forhlr2_queue',
        '_queueadapter': {
            'cpus_per_task':    1,
            'ntasks_per_node':  20,
            'ntasks':           20,
            'queue':            'normal',
            'walltime':         '24:00:00'
        },
        '_files_out': {
            'log': '*.log',
            'trr': '*.trr',
            'edr': '*.edr',
            'gro': '*.gro' },
        '_trackers' : [ gmx_log_tracker ]
        } )
In [135]:
fw_ids = lpad.add_wf(gmx_mdrun_fw)
2019-12-11 19:09:33,054 INFO Added a workflow. id_map: {-2: 23625}
INFO:launchpad:Added a workflow. id_map: {-2: 23625}
In [136]:
fw_id = list(fw_ids.values())[0]
In [137]:
fw_id
Out[137]:
23625

File transfer back

instead of relying on the returned fw_id, we can also query the Firework added latest

In [47]:
fw_ids = lpad.get_fw_ids(sort=[('created_on',pymongo.DESCENDING)],limit=1)
In [48]:
fw_id = fw_ids[0]
In [49]:
fw_id
Out[49]:
23426

We query the remote directory our FireWork ran in

In [50]:
launch_dir = lpad.get_launchdir(fw_id)
In [51]:
launch_dir
Out[51]:
'/pfs/work6/workspace/scratch/fr_jh1130-fw-0/fireworks/launchpad/block_2019-12-01-19-01-57-874819/launcher_2019-12-06-00-11-09-904172'
In [52]:
c = fabric.Connection('forhlr2') # host defined in ssh config
In [53]:
res = c.run('ls -lht {}'.format(launch_dir)) # look at remote directory contents
INFO:paramiko.transport:Connected (version 2.0, client OpenSSH_7.4)
INFO:paramiko.transport:Authentication (publickey) successful!
total 975M
-rw-r--r-- 1 fr_jh1130 fh2-project-multilay 9.9K Dec  8 16:03 FORHLR2_GMX_mdrun_np-1648752.out
-rw-r--r-- 1 fr_jh1130 fh2-project-multilay 1.2K Dec  8 16:03 FW_offline.json
-rw-r--r-- 1 fr_jh1130 fh2-project-multilay   43 Dec  8 16:03 FW_ping.json
-rw-r--r-- 1 fr_jh1130 fh2-project-multilay  65K Dec  8 16:03 npt.edr
-rw-r--r-- 1 fr_jh1130 fh2-project-multilay  17M Dec  8 16:03 npt.gro
-rw-r--r-- 1 fr_jh1130 fh2-project-multilay  82K Dec  8 16:03 npt.log
-rw-r--r-- 1 fr_jh1130 fh2-project-multilay  32K Dec  8 16:03 std.err
-rw-r--r-- 1 fr_jh1130 fh2-project-multilay    0 Dec  8 16:03 std.out
-rw-r--r-- 1 fr_jh1130 fh2-project-multilay 5.7M Dec  8 16:03 npt.cpt
-rw-r--r-- 1 fr_jh1130 fh2-project-multilay 5.7M Dec  8 16:03 npt_prev.cpt
-rw-r--r-- 1 fr_jh1130 fh2-project-multilay 850M Dec  8 16:03 npt.trr
-rw-r--r-- 1 fr_jh1130 fh2-project-multilay  90M Dec  8 16:03 npt.xtc
-rw-r--r-- 1 fr_jh1130 fh2-project-multilay 4.2K Dec  8 15:39 FW.json
-rw-r--r-- 1 fr_jh1130 fh2-project-multilay 7.7M Dec  8 15:39 npt.tpr
-rw-r--r-- 1 fr_jh1130 fh2-project-multilay  516 Dec  8 15:39 FORHLR2_GMX_mdrun_np-1648752.error
-rw-r--r-- 1 fr_jh1130 fh2-project-multilay 2.9K Dec  6 01:11 FW_submit.script
In [54]:
glob_pattern = os.path.join(launch_dir,'npt.*')
In [55]:
res = c.run('ls {}'.format(glob_pattern))
/pfs/work6/workspace/scratch/fr_jh1130-fw-0/fireworks/launchpad/block_2019-12-01-19-01-57-874819/launcher_2019-12-06-00-11-09-904172/npt.cpt
/pfs/work6/workspace/scratch/fr_jh1130-fw-0/fireworks/launchpad/block_2019-12-01-19-01-57-874819/launcher_2019-12-06-00-11-09-904172/npt.edr
/pfs/work6/workspace/scratch/fr_jh1130-fw-0/fireworks/launchpad/block_2019-12-01-19-01-57-874819/launcher_2019-12-06-00-11-09-904172/npt.gro
/pfs/work6/workspace/scratch/fr_jh1130-fw-0/fireworks/launchpad/block_2019-12-01-19-01-57-874819/launcher_2019-12-06-00-11-09-904172/npt.log
/pfs/work6/workspace/scratch/fr_jh1130-fw-0/fireworks/launchpad/block_2019-12-01-19-01-57-874819/launcher_2019-12-06-00-11-09-904172/npt.tpr
/pfs/work6/workspace/scratch/fr_jh1130-fw-0/fireworks/launchpad/block_2019-12-01-19-01-57-874819/launcher_2019-12-06-00-11-09-904172/npt.trr
/pfs/work6/workspace/scratch/fr_jh1130-fw-0/fireworks/launchpad/block_2019-12-01-19-01-57-874819/launcher_2019-12-06-00-11-09-904172/npt.xtc
In [56]:
for f in res.stdout.splitlines():
    c.get(f)
INFO:paramiko.transport.sftp:[chan 2] Opened sftp connection (server version 3)

Analysis

In [57]:
edr_file = 'npt.edr'
In [58]:
edr_df = panedr.edr_to_df(edr_file)
In [59]:
edr_df.columns
Out[59]:
Index(['Time', 'Bond', 'U-B', 'Proper Dih.', 'LJ-14', 'Coulomb-14', 'LJ (SR)',
       'Coulomb (SR)', 'Coul. recip.', 'Potential', 'Kinetic En.',
       'Total Energy', 'Conserved En.', 'Temperature', 'Pressure',
       'Constr. rmsd', 'Box-X', 'Box-Y', 'Box-Z', 'Volume', 'Density', 'pV',
       'Enthalpy', 'Vir-XX', 'Vir-XY', 'Vir-XZ', 'Vir-YX', 'Vir-YY', 'Vir-YZ',
       'Vir-ZX', 'Vir-ZY', 'Vir-ZZ', 'Pres-XX', 'Pres-XY', 'Pres-XZ',
       'Pres-YX', 'Pres-YY', 'Pres-YZ', 'Pres-ZX', 'Pres-ZY', 'Pres-ZZ',
       '#Surf*SurfTen', 'Box-Vel-XX', 'Box-Vel-YY', 'Box-Vel-ZZ',
       'T-non-Substrate', 'T-Substrate', 'Lamb-non-Substrate',
       'Lamb-Substrate'],
      dtype='object')
In [60]:
fig, ax = plt.subplots(3,2,figsize=(10,12))
edr_df.plot('Time','Temperature',ax=ax[0,0])
edr_df.plot('Time','Pressure',ax=ax[0,1])
edr_df.plot('Time','Potential',ax=ax[1,0])
edr_df.plot('Time','Bond',ax=ax[1,1])
#edr_df.plot('Time','Position Rest.',ax=ax[1,1])
#edr_df.plot('Time','COM Pull En.',ax=ax[1,1])
edr_df.plot('Time','Coulomb (SR)',ax=ax[2,0])
edr_df.plot('Time','Coul. recip.',ax=ax[2,1])
Out[60]:
<matplotlib.axes._subplots.AxesSubplot at 0x7fbf15e77c88>

Visualize trajectory

In [61]:
mda_trr = mda.Universe('nvt.gro','npt.trr')
/opt/apps/mdtools/jlh-11Jul19/lib/python3.6/site-packages/MDAnalysis/topology/guessers.py:80: UserWarning: Failed to guess the mass for the following atom types: A
  warnings.warn("Failed to guess the mass for the following atom types: {}".format(atom_type))
In [62]:
# check unique resiude names in system
resnames = np.unique([ r.resname for r in mda_trr.residues ])
In [63]:
resnames
Out[63]:
array(['AUM', 'NA', 'SDS', 'SOL'], dtype='<U3')
In [64]:
mda_view = nglview.show_mdanalysis(mda_trr)
mda_view.clear_representations()
mda_view.background = 'white'
mda_view.add_representation(repr_type='ball+stick',selection='SDS')
mda_view.add_representation(repr_type='ball+stick',selection='NA')
mda_view.add_representation(repr_type='spacefill',selection='AUM',color='yellow')
mda_view.center()
/opt/apps/mdtools/jlh-11Jul19/lib/python3.6/site-packages/MDAnalysis/coordinates/PDB.py:916: UserWarning: Found no information for attr: 'altLocs' Using default value of ' '
  "".format(attrname, default))
/opt/apps/mdtools/jlh-11Jul19/lib/python3.6/site-packages/MDAnalysis/coordinates/PDB.py:916: UserWarning: Found no information for attr: 'icodes' Using default value of ' '
  "".format(attrname, default))
/opt/apps/mdtools/jlh-11Jul19/lib/python3.6/site-packages/MDAnalysis/coordinates/PDB.py:916: UserWarning: Found no information for attr: 'occupancies' Using default value of '1.0'
  "".format(attrname, default))
/opt/apps/mdtools/jlh-11Jul19/lib/python3.6/site-packages/MDAnalysis/coordinates/PDB.py:916: UserWarning: Found no information for attr: 'tempfactors' Using default value of '0.0'
  "".format(attrname, default))
In [65]:
mda_view
In [67]:
substrate = mda_trr.select_atoms('resname AUM')
In [103]:
substrate.masses= ase.data.atomic_masses[ase.data.atomic_numbers['Au']]
In [105]:
substrtate_com_traj = np.array([substrate.center_of_mass() for ts in mda_trr.trajectory ])
In [106]:
substrtate_rgyr_traj = np.array([substrate.radius_of_gyration() for ts in mda_trr.trajectory ])
In [107]:
fig = plt.figure(figsize=(12,10))
ax = fig.add_subplot(111, projection='3d',azim=-30)
ax.plot(*substrtate_com_traj.T)
ax.scatter(*substrtate_com_traj[0,:],color='green')
ax.scatter(*substrtate_com_traj[-1,:],color='red')
Out[107]:
<mpl_toolkits.mplot3d.art3d.Path3DCollection at 0x7fbf150d8b70>
In [109]:
plt.plot(substrtate_rgyr_traj)
Out[109]:
[<matplotlib.lines.Line2D at 0x7fbf14917a90>]
In [119]:
try:
    del mda_trr
except:
    pass
try:
    del mda_view
except:
    pass